This is how you make fettuccine Alfredo like the Romans, only...not quite as overloaded with butter and cheese as the original recipe. Read More
Japan may be the greatest culinary destination on Earth. It could take a lifetime to explore the food there thoroughly, but even a short trip can open up worlds of discovery. Here are some of Daniel's top picks from a recent trip to Tokyo, Kyoto, Fukui, and Ishikawa. Read More
Read more of this story at Slashdot.
Read more of this story at Slashdot.
When you take too long to choose a chocolate.
Good intentions usually drive the “gamification” of websites—adding points, badges, and leaderboards to make them more engaging. It sounds like a great idea, but borrowing game design elements out of context is a risky way to design experiences, especially experiences intended to bring users back to a site.
Not everyone wants to spend more time on your site just to get a badge; some people simply aren’t motivated by such extrinsic rewards. When game designers include elements intended to promote deeper engagement, they look at their users through a very different lens than those of us in web design. Understanding how and why they do this can help us craft more engaging web experiences.
A game designer and a web designer looking at the same user research will most likely come up with totally different personas. Talking about many people as though they were one person can be a strength;it gives a clear vision of who we need to serve. But it’s also a limitation because this method of clustering requires us to pick certain axes and disregard others. Web designers cluster people by their needs and abilities, but in doing so, we tend to disregard their personalities. Game designers are more likely to fixate on interaction styles; they embrace personality.
Let me show you what I mean. Pokémon Go has seen a meteoric rise in popularity since its release, possibly because of how well it caters to people with different personalities. In Pokémon Go, people who like to compete can “battle” in gyms; those who prefer to collaborate can go on “pokéwalks” together; and anyone with a drive to explore and push boundaries can try to “catch ’em all.” Even if a player enjoys all of these options, they’re likely to find one more motivating than the others. Ensuring that the game caters to each interaction preference enhances its appeal to a wide audience.
The same is true of web design. Adding gamification elements to draw in more visitors—but only elements that cater to competitive people—can overlook the wider audience. UX design that doesn’t target a variety of interaction styles is going to be hit-or-miss.
Game designers (and educators and psychologists) segment people in ways that complement web design and user experience. I’ve put together this guide to show you how they think and how (and where and why) we can use their models. Along the way, I’ll show how those models might overlap to create one bigger framework that we can use to pinpoint strengths and weaknesses in our designs.
Making it fun
Emotional design—the practice of moving interfaces beyond merely usable—is a growing field of interest among UX designers. (I highly recommend Designing for Emotion and Seductive Interaction Design.) Unsurprisingly, game designers have a theory of fun, too.
A recent study performed a contextual inquiry of hardcore and casual gamers, plus interviews with their friends and family members, identifying four types of fun (PDF) that relate to interaction preference.
- Hard Fun comes from pursuing a goal—earning rewards according to progress.
- Easy Fun focuses on something other than winning. It encourages learning and emphasizes feelings of wonder, awe, and mystery.
- The People Factor caters to interaction with others; the interface becomes a mechanism for social engagement.
- Altered States attract people to engage in a social context to feel something different (e.g., to gain pleasure from acting upon or inciting those around them).
These styles are easy to spot on social networking sites:
- Competing for likes or followers (as on Twitter) is Hard Fun.
- Casually browsing to find humorous new posts (as on Tumblr) is Easy Fun.
- Engaging with a social network to connect with other people (as on Facebook) is a People Factor.
- People who experience excitement from messing with other people (as on Reddit) are enjoying Altered States.
Bartle’s four player types
There are numerous ways of grouping people by interaction style, including Hallford and Hallford’s six categories of player behavior and Yee’s statistical clustering of three player types (PDF), but I find that these approaches roughly map to Richard Bartle’s 4 player types (particularly the three non-Troll ones). Bartle’s theory is among the most common approaches chosen by game designers (Fig 1).
Suppose you have an ecommerce site for people to buy snakes. An Achiever may be motivated to engage by extrinsic factors: How many snakes can she collect? How many reviews of snakes can she write? The Explorer may be motivated by learning more about snakes: What’s the length specification on the new python? Where can she read more about novel uses of snakeskin? The Socializer will be motivated by interactions with others: What types of snakes are her friends buying? Is there a discussion forum where she can connect with others over her love of snakes? And you’ll probably have to deal with a couple of teenaged Trolls who just want to make fun of everyone else’s snake-buying experience.
Bartle also examines pairwise interactions between player types. This leads him to the following sorts of conclusions:
- The ratio of Achievers to Trolls is like the ratio of rabbits to wolves. When there are too many Trolls, the Achievers leave, but without interesting victims, the Trolls leave and the Achievers return.
- Providing opportunities for exploration is key. When there aren’t enough Explorers finding new things and telling others about them, the Achievers eventually get bored and leave, causing the Socializers and Trolls to leave, as well.
- Trolls keep the Socializer population in check. To reach the widest audience possible, a few Trolls are necessary because they keep the Socializer population from expanding exponentially and pushing out the Achievers and Explorers. (The only other stable equilibria involve fewer player types: either a balance of just Trolls and Achievers or else a community almost exclusively composed of Socializers.)
Another way of segmenting people is by identifying what motivates them. At a recent conference, I saw a presentation of a study of a mobile fitness coach. The presenters said that people’s motivations for exercise tend to cluster into distinct categories. Bartle himself didn’t focus much on motivation, so it was fascinating to see how closely the presenters’ categories align with Bartle’s: one extrinsically motivated, one self-motivated, one socially motivated.
In addition to the two dimensions considered by Bartle (Players versus World and Acting versus Interacting), a third axis should be taken into account: the players’ motivations for choosing to engage. Unlike the binary nature of acting OR interacting with the player OR the world, motivations fall along a spectrum of intrinsic and extrinsic motivation (Fig 2).
Ryan and Deci’s Self Determination Theory (PDF) is a framework illustrating how player types vary according to source of motivation (Fig 3).
How we can motivate people to engage with a site or app depends on where their interaction style falls along this spectrum. What player type we cater to also determines how likely people are to stick around.
- We can motivate Achievers (or the Achiever side of people) by adding extrinsic metrics they can use to compete with others. Achievers, being extrinsically-motivated, will eventually grow bored and leave. Gamification techniques like points, badges, or leaderboards motivate Achievers extrinsically but can also give them a way to measure their growing competence (encouraging intrinsic motivation).
- Explorers set their own goals and are self-motivated to interact with your website. Because they’re intrinsically motivated by enjoyment of the task itself, they tend to stick around longer. (Bartle says that changes in numbers of other player types doesn’t usually impact the number of Explorers.) To promote long-term engagement of Explorers, it helps to introduce unexpected achievements. Hinting that there are some Easter Eggs hidden in your site could be a great way to encourage explorers to stick around.
- Socializers will stick around as long as there’s enough social interaction for them. We can motivate them by adding ways to add their own thoughts to site content, such as comments on an epublishing site or reviews on an ecommerce site. If they don’t get enough external feedback from other people, they’ll leave. Adding a way to “Like” reviews or respond to other users’ comments can help to provide this feedback.
- Trolls set their own goal of annoying other users, but they require feedback from others to know that they’re actually being annoying. The expression “Don’t feed the Trolls” means removing this feedback loop, which we can do with moderation tools and community posting guidelines.
How you choose to present rewards will encourage people with different preferred interaction styles to engage with your product. Conventional cognitive psychology wisdom suggests that irregular rewards at irregular intervals motivate continued engagement most effectively. (Expected rewards can be problematic because if people know that a reward is coming, they may work for the reward rather than focusing on the task itself.) Yet, having a variety of expected rewards can help people set goals, thus promoting Achievers.
Helping people learn to use your site
When we make fairly complicated sites, people may cycle through different player types as they learn to engage with them.
To see what I mean, consider the Experiential Learning Cycle of Kurt Lewin, which contains four stages (Fig 4).
Viewing this cycle through Bartle’s player types, it’s possible to align player characteristics with aspects of Lewin’s cycle: Achievers concretely experience the world, Explorers reflect upon what they see, Socializers abstract the world into a context they can discuss, and Trolls premeditate their approach to interactions. This mapping also works with Bartle’s axes (Fig 5).
For example, someone coming to a large content site focused on do-it-yourself projects might initially be motivated to engage by their own experience with home improvement. Once they’ve engaged regularly with the site for a time, they might move to a more reflective mode, exploring more of the site. If they really get interested, they might join in the discussion forum, discussing projects with others, and this discussion will give them new ideas for projects they can create in their own life. Application of the ideas to the real world moves back to the Achiever quadrant, but may impact people in that world as well (the Troll quadrant). Thus, if we want people to engage deeply with a site or app over time (learning different aspects of it) it helps to support the many different interaction styles that people may use to engage while learning.
Making it engaging
Of course, when we make websites, we often talk about supporting immersion through an experience of flow. Game designers again bring light to this form of interaction. Salen and Zimmerman, authors of the seminal textbook on game design, note that four parts of Mihaly Csikszentmihalyi’s flow model are necessary for flow to occur:
All four player types need all four of these to engage fully, yet each prerequisite of flow might be aligned with a player type and learning stage (Fig 6).
- Achievers seek challenge. (They don’t set their own goals as much as Explorers, but will tackle whatever extrinsic challenge you put in front of them.) Challenge is actively experienced.
- Explorers set their own goals to create challenge for themselves. These goals project into the future with reflection upon observation.
- All players need feedback from the game, yet Socializers thrive upon feedback from other players.
- Trolls seek control. (To prevent trolls, building in some form of moderation system is a way of taking away their control.)
For example, a photo-sharing site might create an immersive experience by challenging people to upload a certain number of photos, letting them set their own goals for organizing content, allowing other people to give feedback about the quality of the photos or collections, and giving everyone a comfortable sense of control over their own photos and collections. Introducing artificial difficulties, like saying “Try only uploading black and white photos this week” can make the experience more game-like, presenting a challenge that people can choose to use as their own goal or not.
Bringing it all together
Here is a fully overlaid model based on my own interpretation of how they’re related (Fig 7).
This model might be expanded further using other four-part models from game design such as Hallford and Hallford’s four reward types or Callois’s four game types. To examine how people progress through the learning stages, we might overlay David Kolb’s Experiential Learning Cycle (which is built upon Lewin’s model for learning).
I haven’t tested all the variables here, but I hope that this grouped model can be a useful diagnostic tool, as I’ll show with the following three examples. (If you encounter evidence supporting or refuting this way of overlaying the models in your own work, please leave a comment at the end of the article explaining what you’ve found.)
The model suggests that if a new feature does not succeed right away, it may largely be due to the interaction styles of the people engaging with the site or app. For example, on a start-up site I worked on, the most engaged users were the ones who had created their own reviews. When we added a discussion forum, it initially didn’t get a lot of use. One possible diagnosis of this slow beginning is that most of the people we’d attracted were Achievers, who learned through their own experiences and enjoyed the challenging hard fun of seeing who could write the most reviews. We dialed back the discussion experience to focus the site more directly on these Achievers. Another approach might have been to add a competitive element to the discussion itself; you’ve probably seen forums that rank their participants, which is a way of luring Achievers to be more social (and thus creating a more diverse community for Socializers).
The Troll quadrant is certainly the one least directly mapped to by other models. One possible explanation of this is that we try not to design for Trolls. An explanation I consider more likely is that in a socially-moderated setting, there’s little opportunity for Trolls to exist. If your site is having difficulty with Trolls, the model suggests that making it more difficult for people to act upon people can mitigate the problem. Moderation tools can take away the control that trolls require, making it difficult for them to create altered emotional states.
Bartle found that Explorers are rare and difficult to attract, but necessary for the long-term survival of a site. They’re the ones who try out new features to give the rest of the community things to do and discuss. One conventional approach to trying to increase site engagement is to add “gamified” elements, such as points, badges, and leaderboards. But such an approach may actually harm long-term engagement because such extrinsic motivators are unappealing to the Explorers who help the community evolve. Looking at what interaction types a site appeals to and then adding elements to appeal to others can help the site to grow a well-rounded, sustainable audience.
There’s much more that can be brought from games to make the web fun and meaningful. I hope that a greater understanding of how game designers make experiences engaging can empower web designers to craft a more intriguing and inviting web for a wide variety of people.
This blog post says the opposite of its lazy and deliberately provocative title. I have become a huge fan of ReactiveUI. I just want to ramble about the path I took to get here.
Listening to Paul Betts
I first heard about ReactiveUI at a conference presentation by Paul Betts. I think it was at Xamarin Evolve. Mostly I remember feeling dumb. He said a lot of things that I didn't understand.
I went to that session without much real experience in Model-View-ViewModel (MVVM) development. Conceptually, I understood the idea of a ViewModel. But Paul mostly talked about how ReactiveUI avoids certain problems. And since I had not experienced those problems, his words didn't sink in.
Talking to teenagers about risk
Each time one of my kids was approaching adolescence, I sat down and explained the risks associated with certain choices. Laws and moral judgements aside, the simple fact is that many choices involve risks, and I thought it would be helpful to pass along that bit of information.
And in each case, my child said, "Thanks Dad", and proceeded to always make wise and low-risk choices from that point on.
Well, actually, no.
Teenagers simply do not learn that way. They process risk very differently from people who are more mature. Tell a 16-year-old that "if you drive too fast you might get a ticket". The adolescent will immediately begin driving too fast, and, in all likelihood, will not get ticket. This is how teenagers realize they are smarter than their parents.
Tangent #1: It is almost certainly a good thing that young people are more brave. It would be Very Bad if everybody started out with the same level of risk aversion as the average 65-year-old. Go watch the "Tapestry" episode of Star Trek TNG.
Tangent #2: I really should claim no expertise in parenting, but if somebody forced me to write a book on parenting a teenager, I would say this: Let your kid suffer from their own choices. That said, it is worth the effort to try and help them avoid the really bad mistakes, the ones with consequences that last for decades. But they do have to learn to make their own choices. Realize this as early as you can. The path to frustration starts with making everything all about you.
How we learn new technologies
My metaphor has many problems. For starters, Paul Betts is not my Dad.
Also, the element of adolescent rebellion was not present. I didn't hear Paul's wisdom and run in the opposite direction because of my deep need to separate my identity from his. In fact, I started devouring everything I could find on MVVM and IObservable. I really wanted to understand what he was saying.
But the metaphor works in one significant way: Like a teenager, I had to learn by doing. Nobody's words made much of a difference. None of that reading helped me become a a user of ReactiveUI. I went down another path.
Actually, I went down several other paths.
Maybe it's just me
I observe that most developers want content that explains how to get something done. "If your objective is to do X, then do the following steps." The most popular books and articles tend to follow this pattern. Questions of this form are the ones that do well on StackOverflow.
But this is almost never what I want.
I much prefer content that explains how things work. Once I understand that, I can figure out the steps myself.
When I am developing software, I always, ALWAYS do better when I understand what is going on "under hood", when I can see through the leaky abstractions.
And as I mentioned, I am apparently in the very small minority on this. If 90% of the world disagrees with me, does that put me in the top 10% ? Or does it mean my approach is somehow defective? Modesty aside, my history contains enough successes to allow me some confidence in believing that my approach is better.
I also observe that my approach is just a different spelling for the old adage, "Give a man a fish and you feed him for a day. Teach a man to fish and he eats for a lifetime."
If you tell a software developer what to type and where to click, you can help them complete today's task. But if you instead teach them how things work, they will be able to apply that understanding on other days too.
Hmmm. I'm talking myself into this. I don't know why most people prefer shallow recipes, but I really do think deep understanding is better.
Still, I like to stay open-minded about things. I've got a lot of failures too.
The truth is that my approach has tradeoffs. The need to understand everything tends to slow me down during the early stages. I usually gain some of that back in the fourth quarter of the game, where deeper understanding is often helpful in diagnosing tricky problems.
But again, in the decision making around software development, absolutes are rare. I'll admit that sometimes a simple set of steps without depth are exactly what is needed.
Maybe the ReactiveUI docs are just bad?
I don't know. Maybe. I've read the docs plenty. They don't seem bad to me. I also see nothing there that makes me want to defend them as the best docs ever.
Suppose that I regret not choosing ReactiveUI sooner. Further suppose that I wanted to blame somebody else for my choices. I guess I could find something to complain about. But I also don't tend to find that criticizing somebody else's work is helpful.
And remember, I started this journey sitting in front of an audience, listening to Paul Betts, and feeling dumb. To be clear, in that kind of context, I *like* feeling dumb. It's an opporunity to learn.
So why did I not choose ReactiveUI sooner?
I guess I don't really know. But I'm pretty sure that nothing has made me appreciate ReactiveUI more than the suffering that comes from not using it.
And that remark isn't very helpful, is it? I'd like to try and do better. Let's see...
"Son, it's just basic statistics. If you're going to always drive 15 MPH over the speed limit, you will eventually get caught. Suppose you roll the dice 20 times in a row without getting a 12. You still might get a 12 on the next roll, right?"
Oh, wait, wrong topic. Let me try again.
Why is ReactiveUI awesome?
In some software development situations, like mobile apps, if you take a step back and look at the forest instead of the trees, you will see that most of your code is reacting to something that changed.
There are lots of tools you can use to approach this kind of app. You can use C# events and callbacks and switch statements and delegates and lambdas and observables and notifications and bindings and more.
For simple apps, none of these approaches are much better than any other. But as your app gets more complicated, some approaches cope more gracefully than others.
Most cars drive pretty smooth at 30 MPH. But at 75 MPH, some vehicles are still giving a smooth ride, while others are shaking.
Let's try a conceptual example or two. Suppose you have a button, and you want something to happen when the user presses that button. This is pretty simple. All reasonable solutions to this problem are about the same.
On the other hand, let's say you have a list of items. The items in that list come from a SQL query. That query has 4 inputs, each of which comes from a UI control. Every time one of those controls changes its value, the query needs to be re-run and the list needs to be updated. A couple of those controls need to be disabled under certain circumstances.
These UI elements have a complicated relationship. We still have plenty of choices in how to express that relationship in code, but this situation is complicated enough that we start to see differences between those approaches. Some of the ones that worked out really well in the simple case seem kinda tedious for this case.
If my driveway has half an inch of snow, all methods of clearing it are about the same. But if my driveway has 15 inches of snow, a shovel is decidedly inferior to a tractor.
Why do I like ReactiveUI? Because I have found that it copes gracefully as the situation gets more complicated.
Why is this? Much of the credit goes to the "reactive" foundation on which ReactiveUI is built. Reactive Extensions. Rx. IObservable. These building blocks are particularly adept at expressing the relationship between a group of things that are changing. ReactiveUI adds another layer (or two) on top of these things to make that expressiveness more convenient when implementing user interfaces.
To be honest, I fudged a little bit when I said that all solutions are roughly equivalent when the problem is simple. That's not quite true. For simple situations, I'd have to admit that ReactiveUI might be a little worse. There is a learning curve.
If I am writing a grocery list, I could use a word processor, but a pencil and paper is actually simpler. But if I am writing a novel, the word processor is the clear winner.
I'm claiming that the effort to learn Rx and ReactiveUI is worth the trouble. My claim is based on this notion that ReactiveUI shines as complexity increases, but also on my belief that most people underestimate the complexity of their app.
If you disagreed with me above when I said that "most of your code is reacting to something that changed", you might be underestimating the complexity of your app. It is in fact very common to start implementing under the assumption that something will not change and then later realize that you need notifications or events. Or an observable.
Would the paragraphs above have changed my course earlier?
I don't know. Probably not.
I didn't start this believing that I could write the best ReactiveUI advocacy ever. Looking at it now, I can't believe I wrote it with no code in it. The canonical ReactiveUI evangelism pamphlet has gotta have WhenAnyValue() in it somewhere.
I just think it's interesting that despite my best efforts, I was unable to really understand the benefits of ReactiveUI until I tried using its alternatives. My current project is late. If I had chosen ReactiveUI earlier, maybe it would be, er, less late? There are questions here worth asking.
But am I 100% certain that it is always better to spare yourself the learning experience of using less effective approaches? No.
Can I credibly claim that everyone should choose ReactiveUI in every situation? Certainly not.
Maybe all I can say is that I am currently having a great experience with ReactiveUI.
Maybe that means the rest of this blog post is useless.
But you should have known that when you saw the cheesy title.
Пътешествие из обаятелните Родопи в разгара на златната есен.
Криволичещи долини са превърнати в язовири с причудливи форми.
Селца са нахвърляни на неподозирани за обитаване места.
Дефилетата са реки от пъстра есенна гора.
В часът на залеза боровият лес придобива ръждив цвят.
На места погледът стига толкова далече, но все тъй не е способен да прехвърли безграничните родопски гънки.
В някои от тях, вместо язовири, са се сгушили градове.
С настъпването на мрака издайнически светват околните махали.
Погледнат от височината на таз родопска твърдина, новият ден предвещава да е съвършен.
Изящна гора посреща топлите слънчеви лъчи в експлозия от цветове.
Долината се изпълва със златна светлина.
Из неведомите родопски пътища, лъкатушещи през нагънатият пейзаж, ту се появяват и изчезват китни селца.
В усоите на долините, каменни мостове от незапомнени времена стоят надвесени над планински ручеи.
Величествени руини загатват за присъствието на древни цивилизации.
Искряща, като самото злато, e есента в Родопите.
Panna cotta is incredibly easy to make, and if it takes you more than five minutes to put it together, you’re taking too long! The result is a silky, custard-like dessert that pairs well with fresh fruit, a compote of baked fruits, or even just a spoonful of homemade jam.
Interestingly, it’s become popular in Paris and nowadays, it’s just as common to see it on menus as crème caramel and crème brûlée. The nice thing about Panna cotta is that you don’t have to make a custard or worry about baking it in a water bath. And the pairing possibilities are endless.
Continue Reading Panna Cotta recipe...