Microsoft published the really neat Visual Studio Achievements plugin a couple of days ago and I am both terribly excited about and disappointed in the plugin.
I absolutely love the concept. Programming is often a solitary activity and a developer’s triumphs and tribulations usually private ones. The achievements system would allow developers to record and share some of their victories, glimpse into the lives of other developers, and even help them become more effective programmers.
My disappointment is in a specific category of achievements: “Shame” achievements.
The current state of achievements
Gamification and the badge/achievement concept is still in its (relative) infancy and as such it tends to be implemented differently by everyone. With that caveat out of the way, there are three types of badges/achievements I generally see:
- Status achievements: Achievements worth bragging about. You collected 1,000 widgets, killed 10,000 ogres, or answered 100 questions.
- Exploratory achievements: Achievements that encourage players to engage in actions that they may not have otherwise engaged in. You used intellitrace, updated your profile, or completed 10 side quests.
- Surprise achievements: Achievements that are awarded for completing standard actions but remind you of your progress. They can also be used early on to help acclimate users to your achievement system: You installed the software, you rescued your first 100 villagers, you have been coding for 1,000 hours.
The thing that all of these achievements have in common is progress. They indicate forward movement on the part of the user towards either greater proficiency, better familiarization, or even just more time spent on an activity. Achievement in most systems are positive reincforcements.
How Visual Studio is doing it wrong
Visual Studio has an entire category of achievements called “Don’t Try This At Home”. These achievements include:
- Go To Hell: Use of the goto keyword. Um, I heard it was a best practice that you weren’t supposed to do that anymore.
- Scroll Bar Wizard: Write a single line of 300 characters long. Who needs carriage returns?
- Job Security: Write 20 single letter class level variables in one file. Kudos to you for being cryptic!
The content and descriptions of these achievements indicate in a very edgy and snarky (or bitter?) way that earning these achievements isn’t exactly a good thing. The existence and phrasing of these badges is in contrast to the generally positive and rewarding nature of most achievement systems.
These are “Shame” achievements: Achievements that you really don’t want to earn.
Even outside the “Don’t Try This At Home” category there are number of achievements that do not reinforce positive behavior:
- Potty Mouth: Use 5 different curse words in a file. Wash that mouth out with soap!
- Lonely: Code on a Friday or Saturday night. Coding? Tonight? Ouch.
- Regional Manager: Add 10 regions to a class. Your code is so readable, if I only didn’t have to keep collapsing and expanding!
Shame achievements have their place
There can absolutely be a place for shame badges (calling them “achievements” actually just sounds wrong): badges that get published and badger us into correcting our ways. It’s not the most positive way to do it, but it has its place.
And this is actually an area I am interested in seeing explored more. Negative reinforcement is tricky to do right but it can be useful in certain situations.
The way it was implemented here however is just bad.
Lumping shame badges into the same bucket as standard positive achievements actually harms the system and might do actual harm to the developer community.
How it harms the achievement system: It is going to reduce the attractiveness of the badge system in general and more specifically it is going to reduce the desire may have to share their achievements. Earning badges like “Potty Mouth** and “Job Security” are not things I am going to be proud of and forcing them on the same page as all the other achievements reduces my desire to my achievements “wall” with others or post it on my blog. A list of accomplishments generally doesn’t include speeding tickets and mug shots, and forcing them into the same system isn’t going to foster adoption.
How it might harm the developer community: People may actually think that earning these badges is a good thing. It. Is. Not.
Even if everyone recognizes that the behavior in the badges is not positive, their sheer presence and comradery with the other achievements invites people to earn them. I don’t want developers earning these achievments “sarcastically” or implement the functionality described in these badges to rank higher on the leaderboard. This is not behavior we should be encouraging and the mere existence of these badges on an “achievements” page encourages that very behavior.
Shame badges should not be permanent. These badges should be associated with a specific problem that you can solve, and when you solve the problem, the badge should be removed. Or better yet, a “turn-around” achievement can be awarded both as a historical marker to indicate the shame badge existed and also as a status badge to demonstrate progress for that developer.
I think the Visual Studio achievements plugin has a tremendous amount of potential and I hope it doesn’t shoot itself in the foot or cause any harm by botching some of its achievements. We can do better!