This is a guest blog by Stefan Kohler, creator of Badgr, an add-on that makes Stash more fun by introducing achievements and badges for commits. Badgr won the award for “Best Stash Add-on” in Codegeist 2012, Atlassian’s annual plugin development competition.

Imagine me sitting behind my laptop, rainy weather, not having the best day. Then Codegeist is announced. Yay! Codegeist is my opportunity to act on ideas I have for Atlassian products but am not able to take on during regular work hours. I like my work, but I love Codegeist! And having a $15,000 prize for incentive does help get me through the wee hours of the night.

I had taken a special interest in Stash for Git repository management–it’s fresh out of the oven, has lots of potential, and there were no other plugins or add-ons available yet. A real challenge! Coincidentally, I just finished creating an agile card game, Fragile Agile, with 42 and I was still in the gamification mood. Remember Fourwalls or JIRA Hero, one of last year’s winners? Well I did, and it made me decide to make an achievement system for Stash.

Game on!

Why Gamification? Well it’s fun and we could all use a bit more fun in our jobs. Gamification can also be a motivator–people are willing to do a bit extra just to get to the next level or achievement.

Gamification is a hot trend right now and many companies and startups are building products around gamification or incorporating it into their existing products. But gamification is not a new concept. Back at school you were rewarded if you did your homework or completed your tasks. So why not have the a reward system for working with Git source?

Rewards are not inherently a gaming mechanic. But saving up rewards for an achievement can be! Achievements should be a challenge to accomplish, but not so hard it gets boring or you give up. There must also be some incentive to get that achievement. Bragging rights or a t-shirt can go a long way. Leaderboards–or a JIRA wallboard–are also great ways to get some friendly competition going.

In the end it comes down to increasing engagement, participation and fun. Whether it’s your daily job, training or shopping.

Gamifying Stash

I wouldn’t consider committing code to a repository fun. Necessary? Yes. Fun? No! But if I could earn some kind of achievement for small commits, adding JIRA tickets to commit messages, or just providing a commit message that adds value, then it might become fun! And things that are fun to do, you do them more often. Hence Badgr: achievements in Stash based on your commits.

The first challenge was actually getting to these commits, preferably the moment they got pushed and not via some sort of scheduled job. It’s important to give feedback on earning an achievement as soon as possible. I found this solution in the ChangeSet indexers of Stash. These indexers get triggered on a push to Stash and contained all the information I needed: changeset, changes, and the commit messages.

At this point I was able to reward people for committing their Git source code. Remember what I said earlier – rewarding is not gamification, the aim is to get achievements. If you look at achievements as the sum of many rewards (i.e. added 100 files to Stash) then you have a good start on getting achievements. I decided to add a counting mechanism which keeps track of the progress on an achievement. This turned out to be a great call, because I can now display that progress on an achievement, which motivates you to do an extra commit!

The hard part seems to be over, but the opposite is true. Games are not fun by default. A lot of games are no fun at all. Games are fun not because they’re games, but when they are well-designed. The hard part was in the design of the achievement overview, notifications, and of course the badges themselves. But design is worth it! Would you put the same effort into getting an achievement if the reward looked like crap? I wouldn’t!

Does Badgr work?

Well, the technology certainly does work, but does the gamification work? Are people committing more often or adding better commit messages? In all honesty, I don’t know yet. I’m in the strange situation where I don’t actually use Stash, most of my code is either committed to Bitbucket or an internal svn. Although adding Badgr to Bitbucket would be pretty cool *hint*. But I have had some people test it for me and the responses have been pretty amazing.

Try Badgr, Fork Badgr

Adding Badgr to a Stash installation would definitely add some fun and competition to it, which will hopefully get your dev team more engaged. Your developers have to commit anyway…why not make it fun?

The great thing is that Badgr is open source, so a company could fork it, add some of their own custom achievements or internal jokes and keep building on it to keep people coming back for more. If I could, I would give you an achievement just for doing so!