 So welcome to the then and the art of free software talk Which is a catchy title to get you all interest ability Know your user You are a free software developers, so you scratch your rich So you are the user of your software So the better, you know your users the better, you know yourself and you reach enlightenment I will go in the email. I have to meditate about that sometimes and I will start a new religion Hi, hey Okay, okay So I'm going to introduce a couple of key concepts called situation and frustration and then Well, which I would bear interested in like Usually and then I will explain how to do a bit of Specification design testing and debugging from a social point of view In like 45 minutes, maybe less maybe more. I don't know So get ready. I've tried to take some concept from the ergonomics word and mark them as much as they could into free software development. There's a paper in my Talks page about it as well and well, I'll point you there later So software-shaped society There's an old one. It's not even funny anymore but the kind of Well programs you do kind of have an influence on your users because Well, what do you allow them to do? I mean you make think you make things easier for them and you make things harder for them So this will change the way they work We are used to think that it's a mankind creating artifacts Shaping artifacts inventing artifacts, but then the artifacts go back into mankind And change mankind so when someone invents a hammer Then we start building stuff and we find out that sometimes nails Stick out and we want to have screws And and so without the hammer and the nail we wouldn't have invented screws And now we have a need for screws we never thought about and so we invent the screwdriver And then we start using the screwdriver to dig holes in things and then like we have this whole Like mutual changing which means that the program is never perfect and you can't sell it in a box and But then we do free software. We don't sell stuff in a box. So We are already doing things, right? We should just keep this going Okay, let's skip that Situation in this whole Word There's like people using your software And let's take like a program to read email and then you have a user reports a bug about your mail software and Then you handle him or her like it was you Sitting in your room or whatever reading email and maybe it's like someone in a Nuclear reactor reading email coming from I don't know some automated checking system Maybe it's like an eight years old man in the middle of the Sahara desert trying to talk to his Grandson in emigrated in France or maybe it's whatever So the same mail reading concept gets situated. It's called situated into different kind of situations Which absolutely change everything involved the meaning of it and so on and it's like Thinking about runtime information for your software when you see your like piece of code It's like one thing but then like the the computer it runs on the amount of memory the amount of disk space and How busy is the processor all change the way your software is run and Like this runtime Situation makes it more or less useful and it's the same with people So it's a nice thing to start asking oneself questions about the situation And then the frustration by the way situation Let's go back. I forgot also changes identity I'm not I guarantee in real life as idiot as I am in debcoff At least in some of my real life So and like there's people that speak with a different voice with their girlfriend or boyfriend then they speak with other people You have like you're talking with someone like yeah shit. Fuck this stuff. It's really crap. Damn fix it. The phone rings and so Even the identity of a person changes in situations and it's like Negotiated by the other people around and the rules in society This is all like when someone uses the software the context and everything is really matters and then you have frustration and which is Something everyone working with computers should learn how to cope with Frustration is when I want to do something and I can't and I screw up and beat people or flame that we develop Frustration usually emerged from something that has gone wrong and People cope with it better or worse So we are training people to cope with it by submitting a bug report For example, which is a constructive way of doing it unless the bug report is like fuck. It doesn't work you idiot Which is a bad way of doing it. So Handling frustration and like learning how to handle once frustration Could like lead you instead of like banging your head against the wall, which is like Driving your frustration against yourself could lead you to like fix the bugs and the patch or something or like take a break in computing and do something else and And there are ways to increase or reduce frustration of users, which we don't usually Think about we'll see one or two later but getting used to realize when we are frustrated in our computer interaction Makes us opens our eyes a bit in seeing how our users can be frustrated when they report a bug when they flame WND well Or whatever I feel this in the crowd. So we could ask him about frustration Okay Hi, Andrew finally we meet I like to talk with you Okay, let's close frustration here and go like into something more useful So we design software and we're used to do like specification and all the other kind of stuff There's a way of doing specification from a social point of view Which is defining users Who you are developing for And there's one way invented by this guy over here Which Like it's called Cooper and Like was among the people who invented visual basic, but then he went on doing something more useful, right? Well now he has a design company and sometimes right sintering interesting stuff Well, you may have different kind of users in different kind of environments and one size doesn't fit all and And it's nice before designing a software to see who we are designing for And this design can be done using Persona Which is a detailed description of an average non-existing user As like a person is like your average user and the concept of average user We most of us know is like the one that doesn't exist the average American Hopefully doesn't exist The average Italian doesn't exist It's like some middle point among behavior of many people and so your average the average user of your Male application doesn't exist, but you can design one you can like outline one to Have a reference point It's very important that these descriptions Don't exist To avoid focusing on someone's quirks, so let's say that I have to design the for example the Debian website and and Then I try to think who I design it for and I think like everyone Okay, wrong Everyone means no one will if you design for everyone then no one will find it right So you want to design it for users people in Debian developers and people in the nmq and press people and then users is tricky Leave it to the custom Debian distribution people who know who their users are and So do the press people so let's try to outline a person of the press people. Let's give it a name Man or woman? I heard man John Dove from ZD net whatever like 35 years old Has to track like 20 new sources like it reads all the kind of gnome announce whatever now smelling lists and and Reads the Debian website every day and It works for like six hours a day and then he has another Part-time job whatever then you start outlining some picture like that and that becomes the reference you use for design and and This picture helps you to see needs of someone who is not yourself and And when free software projects, there's another nice issue which is Sometimes we are part of our users and sometimes we are not and When we are it's nice to see if we are like the others if we really designed for ourselves and when we are not it's nice to know to also outline us as one of the Things involved to see to avoid our personal frustration for example, if I'm like a hardcore Assembler like coder and I'm writing I don't know an application for Children in primary school Then like that's that usually doesn't fit Although if you still do assembly, maybe you have Okay, whatever So if that is a situation like I designed for someone who's absolutely different than myself I create something that I don't like and I have to overcome that frustration and So in a way clearing out a bit before why do I do it and who do I do it for? Is really important to do things right and avoid to get crazy in the meantime? And so that's one and you can find a bit of literature I posted By accident today before the talk I posted a link to an article talking about persona in the debcoff made English because it was used It was useful for the web both and we go to the second step So once you know the person the persona you are targeting You want to see what are their goals? What they want to do in life? There's like always the same Cooper guy outlined four kind of goals The most important one is the personal goal Which is sometimes hidden like we don't want to tell people because they're a bit ashamed but like Don't feel stupid is a big personal goal and When you see the error message which says like You got the wrong name That breaks one of your main personal goals because you don't want to feel stupid Maybe it's a problem in the interface, but the interface blames you and it's like going to the post office And like the guy's an idiot, but then blames you for like not Doing things right So personal goal also are the like I'm a researcher and I would like the computer to do most of the work so don't focus on Outlining text and don't spend ages in like making text bold of underline and Let the computer do all the layout is very good. Many people in science do like latech while maybe if you are a secretary and You do boring typing jobs. You may like to Have your work fancier in having some way of putting more creativity in what you do And so you may appreciate being able to do all sort of color and layout stuff So at least you make your work less boring. So in that case you don't want to get bored These are the personal goals Which are more important than the work goals, which is actually getting things done submit paper to the conference or increase the sales of the company I Like to have fun giving the talk much more than I like preparing the paper, right? So well, that's the work goal But then I have a personal goal in the top my personal goal here is like spread Some knowledge about usability to free software people who are by chance the people that create the operating system that I use And so if they know a bit more of that then I will have a better system and Our people like less aggressive when reporting or answering bugs and then my work goals well is creating a good operating system and prepare the talk and Then there are practical goals like when you create a paper practical goal is typing stuff Which usually do not correspond to the personal goal. I want to Well go to the conference drink all kind of alcohol from all kind of parts of the world I want to submit the paper and there's a practical goal, which is type the damn paper Which is really boring and I would really like something that gets it out of my brain and types it for myself So personal goals is things you want to optimize really well so that people don't spend time in something compulsory But uninteresting And there are false goals For example in the past Not now anymore Unfortunately in the past like making a war processor had the false goal or using few CPU cycles Well then people have been overcoming that a bit and now they do also all sort of background stuff like completion and spell checking that we actually like or like When you design like web pages you may have the false goal of minimizing disk space But then maybe you have you cannot like 60 gigabyte hard drive to the server and it's okay And then in minimizing disk space you you've about like having a slower website because has to generate all the pages so but there are false goals that comes from stereotypes in society Which is useful to recognize and like question all the people goals we try to figure out to see if they're really true and And well when you what so in design You have the persona of people you out loud you outline their goals You try to understand them like a bit broader to just said the goal I'm designing a work processor. So the goal of this guy is to write a letter that's kind of Doesn't quite see the big picture. So the goal of these guys like I don't know Sell something and write a letter is a practical goal for selling something So this is another thing to start looking a bit paying a bit of attention to And then you have tasks So when someone actually gets to do something there's well The way you you you work to your goal our task So that's so we get to the task and be analyzed So there's task analysis that works kind of like that you take your persona thing you situate it in her into some kind of environment and Then take the goals and see how they go there And you have to try to find the best way to go there that minimizes frustration so One thing that I realized is many people like Among us Oh when I did the survey on Debian users if someone remembered that Many people perceive that So what do people use Debian for? servers Right What do you use Debian for reading email good? So I thought okay We have people that like have like work goals of like managing servers And their developers are system administrators their system administrators with the work goal of managing servers and The practical goal of reading email a lot So you want to make email efficient for these people and these people are subscribed to tons of mailing lists and Not sucks and making summaries of tons of mailing lists So I came out and wrote a nice tool that makes the summary of mailing lists And then you double click on a mailing list it runs mud and people who see it and actually and who Have a technical setup that fits this software like whoa. I So much needed it Because like that they see where they have new mail and if they have important mail and whatever and so You go through the steps and usually make something that really fits that spot nicely And that's task analysis There's a new another concept But that's an analysis doesn't come from the Cooper guy. So there's no Cooper icon There's another soft. I know blame him so let's Well, that's not even groupable, but whatever point taken another Yeah Well, it was not the one that came out with the seven plus minus two rule so We just play explain something, okay Another interesting thing he came out with which is worth mentioning quickly is politeness of software The software is like he says that software is like your waiter in the restaurant taking your orders and like fulfilling them and you want the waiter to like be interested in what you need and Not bother you too much anyway and like have common sense and Anticipate your needs like if it brings you the soup and you didn't ask for the spoon It would be nice if you also bring the spoon to you even if you didn't ask This and software doesn't always work like that So so all this time it's pretty nice to read The book he wrote because it has nice Explanation for it, but then to cut it simple If you consider your software as a servant to the user and a nice thing nice thing is that your software could be a servant for yourself You could code it in a way that it's quite pleasant to have that as a servant And you don't have is that an asshole that sits there and you have to point it to every single step it needs to do Then we get to I think one of the major forms of frustration Which is the magic number seven plus minus two This is most as small schematics of how the brain works in case you were curious and no one told you It was really simple. You have a Mass storage were virtually unlimited capacity or at least it hasn't been measured yet as far as I know also because it's well it contains concepts And instead of like bits, so it's also hard to measure it Well, okay, the interacts with external organs, but then we skip that at the moment And then you have the working cash Which has a limited size of seven plus minus two atomic arbitrary items It could be seven plus minus two apples numbers CTs whatever you can think as a unique thing and Then you do a source associative queries from the working cash to the mass storage. So when I When I have like salmon in my mind then That goes down to the mass storage and brings up memories of like when I've been at the canteen today and Giving a talk with the salmon hanging Pretty much here or it reminds me of when I was in Scotland and memories of the Scottish people being upset but the United States who are making research is showing then Salmon from United States is healthier than the Scottish and then whatever like and that's associative queries You have an item in your cash which brings pulls up new items in the cash The cash is limited seven plus minus two atomic arbitrary items. It's easy to see that if I start telling you a list of homogenous things like numbers and After it gets a bit longer than so and so you start forgetting about them So if I start telling you like five three one two You can repeat that to me right If I start telling if I told you like nine one two three two four one nine three two five seven eight You probably can't repeat that that easily so that's like You get in touch with the limit of your cash and so well when you make a program and you click on a menu and you have a list of Like ten items without any separators on them There's like a little bit of frustration that kicks in Because you have a list of things you have a simple question What do you want to do a list of items written down can't be more simple But then you have problems seeing the picture seeing what these are what which one is the good one you go through you get to the last one you forgot about the first one you have to go up again and Overlooking this is a source of madness, which is and it's a really common source of madness so what do you want to do since there's a nice way to To go out of this we have two keywords one is atomic and the other is arbitrary so If I have like well, I can't remember numbers as I told them before But I can't I can't remember my own my own phone numbers and Which become one single atomic item once I've been using them and using them and using them They go down in the mass storage as something unique and Then I can retrieve them in only one slot So making groups is a way of separating stuff That that's quite fractal I can think of my city as a single item and then I can split it up in neighborhoods in places squares trees roads have been walking I Don't know friends that leave there So that that that's all recomposed. There's many ways of associating stuff to one atomic item And so grouping things Meaningfully is really good to have a menu with like 20 items, but separated in like four groups That have meanings then that's good And so that's well when you when you design interfaces you can just buy these small bits Make work simple or harder interfaces common line Help man pages Websites link collections and whatever who was it a DevTex talk could probably remember that my goal with DevTex is allow people to narrow down the list of packages to about seven So that you can actually look at it not being scared by it and reason on it So that's quite a Very good one you can try to spot that number in your everyday life get used with the concept and It can be a really good defense to not feeling stupid or frustrated when you use software yourself because you can very well like see something and Pray in yourself to be faster in saying a They designed it badly. It's acting me crazy stuff. I mean you can pray in yourself to do that before doing Damn it. This is so difficult And you get out of the frustration and then after a well a bit of design some heuristic That's good to keep in mind There are ways of testing Software like social wise. There's another one who can't stay below seven But that's okay because it's a checklist so you can go through them one by one and they are disconnected So you don't need to have them all in mind There are heuristic techniques which are fairly easy to use if you are Slightly open-minded and it's like checklist of things to check when you make something So this is the one of the most famous ones. The Nilsen Nilsen heuristic evaluation technique That says you should check that the system status is visible System status is visible. So well, I know if there is something wrong and Then there's a match between the system and the real world So I can use real world metaphors and knowledge and bring them into the system And so that makes it easier to understand. I have control and freedom. I'm not bounded by some arbitrary Features in the program Well, and so on and you can go to Nilsen use it calm Website and you will find an unbelievable amount of literature on it And if you have an interface you hate an Interface that makes you angry about using it You go pick up the heuristic evaluation technique that the kind of Smallest that the one a bit more expanded like the lintian dash capital I Expansion of these items with the explanation that the three or four lines explanation of all of them you pick that up You put it next to your hated interface You go through them one by one and then you submit the best bug report of your life It's really good That's one nice way of doing testing And then there's another way of doing social debugging. I really like this one and I Really I want to push that in Debian. It's unbelievably easy It's been around for a long time and we are all stupid in not using it. It's called flanagan critical incident technique It's been invented by mr. Flanagan whoever to to work in the Aerospace industry mainly for military aircraft To the bug when things go wrong user-wise the whole ergonomics stuff developed Wake up Alfie Hi The whole usability stuff developed in the military word Because they were realizing that it was not only engines going wrong and so they starting Well trying to see how to make things more efficient with people as well and this flanagan came out with Four simple questions. That's less than seven. It's really easy to use To ask people when something goes very wrong or very right Describe what led up to the situation What did you do that was effective or ineffective What was the outcome of the action and was was it effective or would have been Or there was something better that could have been done or expected Yeah, yeah Thanks for the Martin said is seen it before and there's one missing question that could be added which is what did you want to do? Which well fits in because therefore so you can put a fifth one if they were seven it's like no So that's nice to add Well, if people report a bug to you, maybe like usability bug or Well, like I can't do this and you're like I can so you are an idiot Well before that try to ask to go through like these four questions and Maybe something interesting comes out so well Luckily you can find this on the slides online and on the paper so I really suggest you try In the like obscure bug reports you get you try asking these questions and they bring in a bit more insight Remember the fifth mad dog question, which is what did you want to do? So well to finish I've been quick Strange many free software project don't seem to have a direction Like well, I just develop stuff because I want to try out things or because I want to copy something that exists Or because well that that thing written in pearly is doing it right and I want to do it in python Or something like that, but there's no well, they're not really well thought as to solve a need and Well, there are ways to actually Think an engineer software in a way that can actually have a chance to solve some need and Some of them are quite easy to pick up. It's just like spend a little bit before Writing the code spend a little bit think about what do you want to do for whom and like if you want to learn about Okay, no programming and so you want to write an email client in okay. No, that's perfectly right and But if you first think about like identify one you one Target one kind of target users to create that email client It's even better because you won't only have learned about okay. No, but you will have produced something useful and Many free software projects don't care about their users Which is an unbelievable source of frustration for the users and for the developers? Because then you have users you don't care about and they report you bugs and they give you give you contribution You don't care about and you tend to think that all users are stupid and And then you sold them and then they will say all developers are stupid and that's a nice escalation that ends up Well, I don't know flamers whatever But there are ways of working with users you can you are allowed to tell users like Okay, well, okay, you you do physics Well, I'm designing like for high school teachers and I don't want to put that feature in because that's something that would screw their life I'm sorry. Maybe you want to use that other software or Maybe you want to fork your software and make one version for one and one version from the other or change it by configuration whatever but when you like Get used in thinking about kinds of users and user needs You start having the brain structure to actually solve these issues and then lastly if you learn how to make your users happy You could be among your users and you could actually become happier You are a user even if you develop the software because well that that's part of your workflow of your goals of your Work and so you want to make that efficient as well So you want to apply all this also to your personal process so that You don't end up like locked in some weird situation at some point you screw up tell everyone to fuck off and everything dies and So be happy. That's the way Thank me for that because then from now on your life will be all shiny Do we have any questions? You have a few more minutes I'm happy to take questions two questions Okay, the suggestion was to put reference On the mailing list about these things. Yes, I'll do it. This is actually more of a question to the audience I would like to know how many people actually Are experienced with this sort of Software design how many of you use some kind of user Research or other things to design your software before you write it Not not that many Thank you in the beginning of your talking Rico you talked about Users and that is in a sense users want to get something done And they don't necessarily care about how things are done And then one of the things you said don't spend too much time in UI design like making things bold and then underline and stuff like that Yeah, I hope you're aware that Projects like the KDE project actually do nothing else they they really worry about how things look like and in the end It's very important to the casual user to have an intuitive interface because we all we're sitting here We can you know deal with GTK applications I don't think the regular user really wants to to interact with those because it's just not intuitive nor pretty nor Do you really want to? Spend time on it and this is a personal opinion you can flame me afterwards, but I just wanted to say that I think it's important that you distinguish between users that actually want Want to get things done and they are willing to make compromises and Users that have to do things on a computer and for those I think it's more important to actually Design your UIs perfectly. Yes. It's also nice to design the UI nicely there's a whole science of What those guys with the camera like tracking you like I tracking when you use the software to like find the best spot to put a Button and all that sort of things They're really good But they come after design doing a nice study on the goals Because if you have at the wrong dialogue box and you make it really pretty you do one thing that Cooper Cooper calls Embellishing the corpse Decorating the corpse maybe that dialogue box shouldn't have been there in the first place So well for example when I was designing those my buffy like thing for summarizing mailboxes Well, the option was should I spend like one day making a really nice dialogue box For adding all your mailboxes one by one Well, I went for automatically detecting the list of mailboxes that you have and not putting the dialogue box Which makes me really more much more happy when I run the software I have new mail in a new mailbox and that shows up automatically So in that case if I had had like a really nice dialogue for adding dialogue boxes for adding Mail folders or that that shouldn't have been there no matter how nice, but then when you have the good interface Decoration, I mean like tidying up is Ubuntu. I think in a way like you take perfectly working Debian and you make it like Yeah, but and then Whatever and you make it like Nice to a specific group of user and whatever well That kind of tidying up is really important because it also Improves the efficiency if you outline the right word I find it easier if you separate stuff with a nice border It also split them into items and so I get less scared about the complexity of the interface So it's those small cues that are really important, but first well you have to get the right tasks There was a question up there I was going to comment. I think you said almost everything I would Katie and GNOME's Usability guidelines are more in a way of saying The application should be consistent with the desktop because that improves your efficiency Also, because you can take take something for some things for granted That you can you you don't have to guess the behavior of the application because you're already used to it on the Whole system, so it's not really about making things beautiful only. I think it's important But but I agree with you that the rest of the application is comes first Well, yeah, in a way consistency with the desktop is about not providing yet another Stuff that has to fit in your cache if they all look the same then you only have one item to cope with if they have like different Aspects then you always have like Things split in two which kind of again bothers you there's there's a difference Which maybe has a meaning and distracts you occupies one of these stuff one of these slots when and like Doesn't allow you to instead pull up something interesting in that open slot from your mass storage The more free slots you have the more you can use your memory When you are overworked by the way like your cache is always over full I mean the capacity could be higher, but it gives you headache you tend to burn out it has like psychological breakdowns when when it that's overloaded and And like when it use it too much you have problems using your past experiences You're losing creativity if you do two things at the time Well, the problem is exactly that this gets full and Well, if you do one thing at a time focused, well, you can actually have more workspace There's no more question. Thank you for attending