The Penny Game: A Way to Prioritize Tasks Among Many Projects

I’m a fan of agile practices in programming, and encourage my team to work along agile principles as much as possible. One thing that has always been tricky about that for us, however, is that we don’t really match the usual profile of a software team.

Most agile teams (at least in the literature) are focused on a single project, and have multiple people working together to get that project done. We, on the other hand, do all the development work for Texas State University’s Learning Management System (about 32,000 users), Content Management System (287 sites at current count), an Event Calendar system, the University iPhone app, a reservation system for training classes, a custom web content caching system, various custom-built content management systems for accreditation and regulatory compliance, and a bevy of internal tools — all with 6 people.

Needless to say, I’m very proud of my team.

Prioritizing the time of six people when we have ongoing responsibility for more than twice that many projects is, however, a daunting challenge. Our approach for a number of years had been to set release milestones for each project, to do release planning meetings to determine what should go into a given release based on our Planning Poker estimates, and then to try our best to get the work done in time.

This approach had a few problems:

  1. Release planning meetings were long and boring. We would walk through the list of unresolved tasks for a given project one by one to see if anyone wanted to prioritize that task. 90% of our time was spent saying “Ticket #666: add a green widget to the defrobulator. Anyone interested? Anyone? Class? Bueller?” (Only to have Bueller pipe up three tickets later: “Can we go back to ticket #666 for a minute?”)
  2. It was easy for people who had an interest in one project to commit 100% of the development team’s time to that project, while folks who were keen on another project would commit all of our time to that project as well. Our planning process didn’t reflect the fact that all the projects were competing for the same resources.
  3. If we finished all of the tickets for a release early and had extra time (a pretty rare problem, admittedly), we didn’t know what to work on next.

So a few months back, I decided to try an experiment. I got the stakeholders for all of our projects in a room together, gave them each 10 pennies, and explained to them the rules of the game:

“Today you are going to help the development team set our priorities. You each have 10 pennies, which represent tasks you can vote for. In order to vote for a particular task, write it on an index card, put that card in the middle of the table, and plunk down as many of your pennies as you’d like on that card. You can use all of your pennies on one task, or spread them among as many tasks as you like. Also, I encourage respectful argument. Try your hardest to persuade the people around you that they should put their pennies on the tasks you like as well. When we’re done, the number of pennies on a task will help determine its priority for our team.”

Good natured chaos ensued for the next 30 minutes as we wrote cards, passed them around, combined them, discussed the relative merits of the tasks ahead, bumped into each other as we moved around the table, tried to figure out what the heck some of the cards meant, and generally made a mess of the conference room we were working in. When we were done, we had a big, unruly pile of index cards with big, unruly piles of pennies on each:

After the meeting’s conclusion, the dev team took another 15 minutes to count the pennies on each card and put that count into a special “Bounty” field in our ticketing system, creating new tickets as needed. (We use “bounty” and “pennies” interchangeably.) When I was done, I told the system to sort our tickets by bounty, and suddenly had a prioritized list, across all of our projects, of what tasks had the most business value. Beautiful!

Task List Sorted by Bounty

Task List Sorted by Bounty

Of course, the number of pennies on a given ticket doesn’t directly determine the order in which we work on things. We also factor in the estimates for a given task we’ve come up with individually or during our Planning Poker sessions. One can divide the pennies by the estimated hours to get a “bang for the buck” rating for each of the tickets — a much more useful way to prioritize one’s work.

I don’t like to assign tasks to people on my team directly more than necessary. I find people to generally enjoy work much more when they are able to make their own decisions about what to spend their time on. On the other hand, I do want us as a team to provide the most real value we possibly can to our various customers. Since the penny game provided us a “here are tasks with business value” list, I decided to provide a couple of incentives for folks who were completing those tasks:

  1. I took a bizarre southwestern style pot that I had sitting around, labeled it the “Pot of Honor”, and told the team that it would be filled with candy and awarded to the team member each week who managed to complete tasks worth the most pennies during that span. Battling for the dubious honor of having this homely artifact rest on one’s desk for the week provides some silly, low-level competition and recognition for individuals.
  2. I set the team a collective, cumulative goal and told them I’d take them to lunch when they reached it. When we tally pennies for the awarding of the Pot of Honor, we also add up the number of pennies the whole team has completed and add them to a running total. Progress is noted on our work-area whiteboard, so we can all see how close we are to getting to have free food.
The Pot of Honor

The Pot of Honor

I’ve also made space on the whiteboard in our team area where we have our daily stand up meetings to put up the “Top 10” list of tasks that have accumulated the most pennies to help maintain focus on those high-value items.

The next time we played the penny game, a month later, it went much more quickly: we already had cards on the table from the last meeting, everyone had a better idea of what we were doing, and some folks had looked through the tickets in advance to see which tasks they wanted to support. I was surprised to see that, as we got more practiced, we were able to finish the entire exercise in about 20 minutes. We simply added the new pennies to the existing bounties in the ticketing system, making them increasingly juicy as they got older and people still had interest in them.

We’ve been playing the game for a number of months now, and I count our experiment a solid success. Advantages it has provided for us:

  1. Prioritization is way more fun and engaging. It also goes considerably faster than all of our individual release planning sessions did.
  2. The development team always has a clear idea of what our business needs are, and which of our tasks will provide the most value.
  3. Stakeholders cannot say “everything is top priority”, but are forced to choose where to allocate their pennies. The finite scarcity of pennies reflects the limits on developer time.
  4. Individual developers can exercise a good deal of autonomy and choose their own tasks while we still, as a team, deliver on the things we need to.
  5. There are a number of tasks that, while people say they are important, apparently do not merit the expenditure of a penny. As these persist for a sufficient period of time without accumulating any pennies, we can close them as not really being a high priority. (We can always reopen them later if someone decides to spend a penny to raise them from the dead.)

We’ve introduced a few refinements as we’ve gone along: Because some of our systems have tens of thousands of users, it’s ill-advised to get all of the stakeholders in a room at once. To account for this, we give the support staff extra pennies to distribute as proxies for the absent users. We’ve started writing project names and ticket numbers on the index cards to make it easier to correlate them to our ticket system. We’ve begun bringing as many laptops and iPads as possible to the meetings so that people can see the details on the various tickets in question. We now add a penny to each task whenever a user request comes into our support team.

I should note that during the time I was designing this process, I was also reading through Total Engagement, and consciously built in many of their 10 Ingredients for Games: Feedback across a range of time scales (completion of individual tickets, weekly discussion of bounties cleared, longer-term goal of team lunch), Reputation (the awarding of the Pot of Honor), Marketplaces and Economies (the game itself is a market to “buy” the development team’s time), Competition Under Rules that are Explicit and Enforced (there’s no ambiguity about how many pennies are on a ticket or how they’re assigned), Teams (working toward the common lunch goal), and Time Pressure (weekly tallies of points, implicit time pressure of not wanting to be the last person with pennies left to spend while everyone else sits around). I think these elements have been critical in making this a more engaging way for us to do things.

So, if you’re facing a similar challenge with more projects than you have people, feel free to swipe any of these ideas that look helpful. I hope they’re of some use to you. If you do give the penny game a try, please post here and let me know how it goes. Good luck!

Higher Education and the Coming Internet Autodidact

There is a growing movement of people who are learning on their own, rather than relying on institutions of higher learning to provide the necessary structure and opportunity. The Internet has begun to provide access to information with ease and rapidity never before seen in human history. As a result, people who are interested in learning are able to do so without having to rely on the traditional gatekeepers of knowledge.

Evidence of this change is easy to find: The Khan Academy, Make Magazine, Instructables.com, and a whole wealth of podcasts and blogs on nearly any subject imaginable. The experts might still live in an ivory tower, but when that tower has broadband, the rest of us no longer have to make the pilgrimage to the tower to benefit from their expertise. And increasingly, experts seem to find those towers drafty and uncomfortable homes, and choose to be other places altogether.

Some schools have begun to embrace that change in various ways. Several members of my team at work have recently learned Objective C programming to create iPhone applications. Since Texas State University doesn’t offer any classes of the sort currently, many of us have worked our way through the iPhone development course at Stanford University — not by actually attending, but by taking advantage of the videos of the lectures and the supporting documentation that Stanford has published free of charge online.

While this sort of information broadcast is terrific, there is concern in academe, expressed at a recent Higher Education Leadership Conference, that this isn’t going far enough to address the changes that are coming, that in fact students are increasingly able to educate themselves, and will only rely on the University to accredit their learning, leaving Universities a husk of their former selves.

I think that change is indeed coming, and as someone who has a terrible time sitting patiently through classes just to learn the stuff I want to, I welcome it. However, I also suspect that the situation is not quite as dire for our institutions of higher learning as it’s painted. I know there are lots of people who benefit a great deal from having the clear structure and discipline that courses provide. And while the way of the self-taught is one that Universities haven’t embraced sufficiently up until now, giving them some long-overdue attention and validation doesn’t mean that the traditional student will vanish.

Different people have different learning styles, and educational institutions have to learn to grow to embrace them all, rather than flopping wholesale from one approach to another. Their future may just depend on it.

(Thanks to Jason for the link that set my thoughts going on this.)

Mojo

All of you folks who are as interested in location-based gaming as I am have been checking in on Gowalla, Foursquare, SCVNGR, Facebook, Rally Up, or Yelp for a while now. But the lame thing about those services is that you actually have to go somewhere and do something to earn points! Enter Mojo, the web-location based game for folks who are shackled to their desks all through the day but still want the spurious sense of accomplishment that these games bring!

Teasing aside, it’s an interesting concept: allowing people to check-in on various websites and engage with the content there in various ways to earn credit. I’ve added it to the site here; feel free to play around with it if you’d like to see how it works. Just click that little “Earn Mojo” tab on the right to get started. (Though given how infrequently I get around to posting, if any of you earn the “365 Days in a Row” achievement, I’ll be forced to come over there and cut off your internet privileges. Don’t think I won’t.)

Training Registration System

At the University where I work, there’s always a ton of Professional Development activity going on around campus, most of which is centered on training sessions for which people can register. That has always been an arduous, labor-intensive process, with real live humans handling every aspect of managing those registrations — reporting on class sizes, processing registrations, processing cancellations, maintaining a waiting list, communicating with attendees, etc.

To ease that chore, I’ve started work on a piece of software that manages all of those common tasks, driven by the requirements of our training organizations. So far, it allows a user to register for a class, cancel a reservation, subscribe to a webcal calendar that shows the training for which she has registered, download an ICS file to put the event on an existing calendar, receive email confirmations of registrations, to sign up for the waiting list for classes that are full, and to receive email notification when they get moved from the waiting list to the class roster. It’s also the most rigorously test-driven development I’ve done to date, so the code should be of good quality.

I’m managing it as an open-source project, so if you’re comfortable with Ruby on Rails and are interested in jumping in, or would like to download a copy to fool around with, you can visit the project on Google Code. I’d be delighted to have other contributers if it turns out to scratch anybody else’s itch as well. It is still very much geared toward folks who know a little bit about Rails and are willing to customize it to their needs. If that’s not you, you might want to steer clear for now.

Texas State iPhone App Released

At long last, the official Texas State University iPhone App is released!

The team brainstormed and prototyped the original version as a learning exercise at the beginning of the year, but once Marketing got wind of it, it quickly became a high-priority project. I’m really proud of my crew, who have all stepped up and contributed design ideas and code to the final product, which turned out really well.

We have some ideas for improving it going forward, and have plans to create an Android version as well, but are, for now, just delighted to finally have it out there in the world!

More Good Thoughts on Games and Work

I wrote a piece about a year ago called Workplace Motivation and Game Mechanics which summed up some of my ideas for bringing some of the compelling character of video games to the office. Since then, some much smarter people have been doing some thinking and experimenting with similar ideas.

Jane McGonigal gave a terrific talk at TED called “Gaming Can Make a Better World”. It’s well worth the 20 minutes it takes to watch:

Additionally, I’ve started reading Total Engagement: Using Games and Virtual Worlds to Change the Way People Work and Businesses Compete. It covers the authors’ experiences in this area, starting with poolside conversations and ending up with forming a company around these ideas. It’s a good read so far.

Based on these, it looks like the invasion of games into the workplace has the potential to create some important productivity gains and is already underway. It should be fun to see what the next decade brings.

On Software Testing

Over the past several years at the University, we’ve had to hire for a variety of programming and programming-related positions. One of the interviewing practices we’ve adopted is to give candidates a programming assignment which they can complete at home, at their own pace using any resources they can muster. Because these conditions approximate the conditions under which they would normally be working, we find this to be a really good indicator or what sort of work they’ll do if hired. (Besides, it’s one of the practices from The Joel Test! We currently score about 8.5/12.)

One of the jobs we’ve been hiring for is what I refer to as the “Quality Assurance Czar” — someone who will spearhead and organize our efforts to make sure the code we’re fielding is as awesome as we want it to be. The programming test for this includes both writing a small program to compare two hands in poker and, more importantly, writing a suite of tests to verify that the program works correctly. (This is not the exact programming challenge we use. It was actually one we considered, but it’s a thornier problem than one would guess at first glance, and there are a number of published algorithms out there already. We decided to make up our own problem so that applicants couldn’t just google for an answer.)

A few months back, one of my good friends — let’s call him Larry — interviewed for this position. He did a fine job in the interview, and while his code was very good, it didn’t include the comprehensive testing we were looking for. He wrote a small PHP application that generated a couple of random hands and then compared them, relying on the person running the program to verify that the winning hand the program chose was correct. His solution was 100% accurate, but didn’t include any automated tests, as he had a hard time imagining what sort of testing would have been useful in that case. Here’s a note he sent after the position had been filled:

I was real proud of my [Poker] app, the one that was supposed to include a testing approach.  Now I’ve tried Selenium, and I still don’t see how to test my app, because it has no user inputs.

What did you guys ever have in mind?

Okay, I can see these tests:

  • entering the URL brings up the page.
  • A refresh causes a change to the page (a new checkers arrangement).

But that don’t seem adequate.

He is, of course, completely correct. While this would test a few trivial aspects of the application’s functioning, it would leave the important and juicy bit of code, analyzing the poker hands, completely untested. (This is called “incomplete code coverage” in the argot.)

There are several things one can do to make this application more testable. First off, one needs to create a mechanism to feed the program a specific input. Once you can do that, you can give it a couple of predetermined hands and verify that it chooses the correct one. Doing this with a variety of different hands will demonstrate that the program is working correctly in those cases.

There are, however, about 2,400,000,000,000,000,000 combinations of two 5 card hands. For obvious reasons, we can’t test all of those. How do we choose which ones to check?

Let’s start with easy ones. Verify that a flush beats a pair. Verify that a full house beats a flush. Verify that four of a kind beats three of a kind. Verify that a pair of 8s with hearts and spades beats a pair of 8s with clubs and diamonds.

Once you have the basics covered, we want to look for “edge cases”. These are where our data bumps up against boundaries of some kind. They’re very important because “off by one” errors are very common in programming, and these tests help to expose those errors. In poker, for example, we would want to check that an “A2345” hand would count as a straight, and that a “10JQKA” would also count as a straight, but that “QKA23” would not.

By this point, we’ve accumulated perhaps a few dozen tests — a miniscule percentage of the possible total, but strategically enough chosen that we have confidence that things are working as they should be. If we later discover that we’ve missed something and that our program is inaccurate in some cases, we simply add another test that demonstrates the failure, and then work on our algorithm until all the tests are once again succeeding.

Next, it’s important to try invalid data and make sure that our program handles the error condition as we would expect. Asking the program to evaluate a hand with 5 aces of spades is meaningless, and should generate an appropriate message for the user. (Something like “You’re a dirty cheating dog” might be appropriate.) Having the 17 of acorns as one of the cards in your hand is similarly out of bounds, and should also trigger an appropriate error.

In Larry’s program, all of the logic was stored in a single PHP file. Though it’s a bit more work to set up, I would recommend using a Model-View-Controller design pattern, and splitting the “evaluate the poker hand” portion of the program from the “show the poker hand on screen” portion and the “handle user input” section. By doing so, we can test these portions of the code independently. If we know that the code that evaluates the hand does so correctly, but it’s showing the wrong answer on the screen, we have immediately narrowed the code that might contain the bug to just the bit that’s responsible for presentation.

Finally, once we’re using MVC, it becomes practical to use one of the many excellent unit testing frameworks that encapsulate a lot of hard-won experience doing effective testing. Since Larry was working in PHP, PHPUnit and SimpleTest appear to be decent options. Using an established testing framework has a number of advantages: the code for common testing tasks (like logging into a site) will already be written, it becomes easier to integrate our tests with other systems, test output can be reported in succinct, attractive forms, and other programmers will have an easier time understanding how our tests work.

So, in summary, we’ve updated our program to accept input, fed it a number of test cases and verified that it’s returning the results we expect, adopted MVC and a standard test framework. We now have both a high degree of confidence that our current code is working as expected and a “safety net”: if we decide to refactor the program or change the algorithm we’re using to compare hands, we’ll know immediately if anything we’ve done has broken it.

For a more comprehensive introduction to testing and using it to drive development, see this article. And if you’ve followed this, want to learn more, and are interested in a job, our QA Czar position is open once again!

High Ed Web 2008 Talk (or “A Cure for Insomnia”)

Last October, a couple of my coworkers and I presented at [High Ed Web 2008]. The conference organizers have, at long last, posted the transcript and audio recording of our session. The quality of the transcript is fairly rough, and they didn’t include the visual aids (which, by the way, I put a good deal of time into converting to a format they’d asked for), but the audio quality is good. If you have an interest in our experiences with content management systems at Texas State University, give it a listen!

Planning Poker

One of the things about writing software for a living is that customers are rarely happy when you tell them “It will be done when it’s done.” Even though development is fraught with uncertainty, it’s still incumbent upon us who practice this craft to be able to give people some idea of what kind of effort will be involved to implement a particular feature.

One way to do this is to have a project manager or senior programmer sit down, think really hard about it, and come up with numbers. This has the advantage of being  expedient, but the disadvantage of being almost certainly wrong. The reasons for this are many: it’s hard to estimate a job accurately when you’re not the person doing the work. All of us as individuals possess blind spots. And programmers are notoriously optimistic about how hard it will be to do something. (Not as optimistic as marketing people are when faced with a programming task, but still…)

One of the approaches I’ve seen that seems to promise the best results over time is Evidence-Based Scheduling. By having programmers estimate the tickets they’ll be working on, then record how much time they actually spend on it, comparing one to the other, factoring in how much productive time they have during the day once meetings, email, and the ilk are all done, and doing a lot of math, one can come up with good quality estimations — especially as one accumulates data on which programmers tend to exaggerate and which think they can finish nearly anything before lunch today. This approach has the advantage of producing really good estimates, but requires detailed tracking both of estimates and actual work time to produce good results.

Somewhere in the middle is Planning Poker, an approach that allows teams to collaboratively create estimates with a minimum of fuss. The basic idea is that you get all your developers together, give each of them a deck of cards with a time estimates written on each card, and have everyone choose how long they think a given task will take by throwing the corresponding card on the table. If there’s not agreement, everyone discusses it, explains their reasoning, and then you do it again until there’s a consensus. (You can read more details here if you’re interested.)

When we’re planning what to do for the next phase of a project, we have to consider two things: how important an issue is, and how much work it will be to do the fix. The latter has, up to now, been done off the cuff by whomever of the developers happened to be in the room. But in the past week, we’ve added a field to our ticketing system for estimates and started doing Planning Poker sessions to capture estimates for the tasks ahead. These seem to be going well, and I’ve noticed some interesting things about them:

  • These sessions are actually pretty fun. Nobody has come away hating the process, and several of the devs involved have said they’ve really enjoyed them.
  • Because the rules of the game call for the people with the highest and lowest guesses to explain their reasoning, we hear from people who are sometimes a bit more reluctant to speak. Having their opinions respectfully listened to can be a very affirming, especially for new folks who may not have a history with the team yet.
  • We’ve actually been doing on-the-fly technical design as we discuss the issues, and have come up with some really good ideas and insights that we’ve then recorded in the ticket since we already had it open there. This was a pleasant surprise to me; I’d only been hoping to get estimates, but have also benefited from some terrific collaborative technical brainstorming.
  • It provides natural cross-training, since even programmers who aren’t involved in a particular project get to listen, ask questions, and vote on its tickets.

So after two sessions, I’m counting Planning Poker as a success, and have scheduled regular sessions to finish estimating our backlog of tickets and to handle new ones as they show up.  Many thanks to Mike Cohn for the great writeup that got me excited about it!

Workplace Motivation and Game Mechanics

I manage a crew of about 5 programmers at work. During our performance reviews this year, I asked each of them how I could do my job as a manager better. One of them, in a bit of much-appreciated candor, said that motivation was one of his biggest challenges, and that he would be grateful for anything I could do to help.

This guy — let’s call him Ivan — is a capable programmer, and does good work, but (like all of us) sometimes has a tough time overcoming inertia and focusing on the task at hand. Interestingly, Ivan is also a World of Warcraft player. (World of Warcraft is an online Role Playing Game where hundreds of thousands of people play together in a shared, computer-based fantasy world.) One of the interesting characteristics of  online RPG’s like World of Warcraft is that they often require one to do a lot of repetetive,  mundane tasks to gain in-game experience and thereby increase your character’s prowess. This is referred to as “level grinding”.

When one is “grinding,” one isn’t doing it for the satisfaction of the task being performed, but for an extrinsic reward of some kind that keeps players at it. In the case of online RPG’s, the reward is an improved character (with a higher level or improved skills), better equipment, the chance to participate in more challenging gameplay, or bragging rights among one’s game-playing peers. Ultima Online, the RPG on which I used to work, would allow the player to link to a web page that showed off her character with her honorifics and arrayed in all her finery.

This sense of accomplishment is one of the things that makes computer games so compelling for many people. In the early days of arcades, the chance to put one’s initials on the High Score list on Tempest was often as big a draw as the gameplay itself. We liked the sense of competition and achievement that list of scores brought with it. More recently, Microsoft did something very clever when they introduced the XBox 360: every game for the system has “Accomplishments” that earn “Gamer Points”. People who play for fun will inevitably rack up a certain number of these, but in order to maximize one’s Gamer Score, one has to again do things that aren’t inherently enjoyable: search out every pigeon in a vast virtual city (and shoot them all), get through a level without firing a gun once, or breed 200 worm-shaped piñatas. One can then put a “Gamer Badge” on one’s website or on Facebook to show the world what you have accomplished as an XBox player. This system has been so successful that Sony has recently copied it for the Playstation 3, introducing a “Trophy” system to the platform with their most recent software update.

So as I looked at all these different mechanisms that games use to take gameplay that might otherwise be uninteresting and make it appealing, I wondered if something similar could be applied to work. After all, try as we might to make the office interesting and enjoyable place to be, the fact remains: if we have to pay somebody to do something, it’s probably not inherently much fun. (There are a lot more musicians who will perform gratis than there are accountants who will do your taxes for no charge.) As I mulled this over, several possible systems came to mind:

  1. Keeping Score: the simplest approach is that of the arcade games of yore: you get points when you do something good, and try to get the highest score within a given period, say a week or a month. (“Something good” for work purposes might be completing one’s timesheet, successfully fixing a bug, dealing with a support call, or presenting at a conference. Each would have a different point value based on its value to the business and degree of difficulty.) This system has the advantage that it provides pretty quick feedback, and that new folks and people who have worked at a job for a while are on a fairly level playing field. The biggest failing of this approach is that a single score doesn’t tell anything about what things one is doing to rack up the points, so one has less motivation to expand one’s skills than to simply concentrate on areas where one already has facility.
  2. Classes & Levels: As with the Keeping Score approach, one is awarded “Experience Points” for doing something good. These points are tallied and, when one has accumulated enough, redeemed for “levels” in various classes. For example, after completing a performance review and a month of development work, I might be a “Programmer Level 3; Bureaucrat Level 2”. Levels generally become geometrically more difficult to attain as they get higher, so a new employee would “Level Up” more often than someone who had been working at a given job for a long while. This provides a more nuanced view of what sort of work someone is doing and maps more directly to a traditional RPG mechanic.
  3. Achievements: With this approach, one has a list of specific tasks to accomplish. For programmers, this might include things like “fix your first bug”, “check in 10 changes to our source control system”, or “get a patch accepted by one of the open-source projects we use.” One accumulates achievements over time, and can see a list of which ones have been accomplished, and which ones are still out there waiting for further efforts. (The requirements for a given achievement can also be kept secret until it’s unlocked.) The advantage with this approach is that one is encouraged to stretch one’s wings and try new sorts of tasks. Unfortunately, it lacks any kind of aggregate view of one’s progress.

At this point, I’m thinking that a hybrid of #1 and #3 might be the best for an office. Each person would have an overall score — perhaps cumulative, or perhaps reset monthly — which would be increased accordingly whenever one did something constructive. In addition, one could unlock achievements by doing specific things. Those achivements would then go on one’s record, and would also provide an extra boost to one’s score.

Whatever system we used would need to have a few specific features:

  1. As much of it as possible would have to be automatic. Nobody wants to spend all day tallying scores, so it would be important to tie much of this to our existing systems and have them add points without human involvement. Some things, like points for helping a coworker, will inevitably require human tallying, but these should ideally be the exception.
  2. Part of the fun of accomplishment is being able to show off what you’ve done. We would need to be able to publish the information on scores and accomplishments various ways: website badges, added to our Twitter Status Board, screen savers, etc.

I’d really like to hear from people on what they think of this idea. Is it something you would enjoy having around your office? Do you think it would help with motivation? Do you think any particular mechanic would be a more effective motivator than another? I’m still brainstorming on all of this at the moment, so would welcome any diverse input folks might have on the subject. Thanks for anything you can contribute!

UPDATE: As I’ve been giving this more thought, another mechanic came to mind that I think would be worthwhile. In the game Team Fortress 2, each player is given a score for the match. The points, however, are earned in various categories, and those categories tracked individually. This results in a lot more affirmation, as even if one had a relatively poor game, it might still be your best performance as a sniper, or the most points you’ve earned by healing other players. Being able to lump work points into various categories could easily result in similar kinds of encouragement when they are tallied: “You earned 625 points this month, which is lower than your personal monthly best of 1027. However, you earned 400 points for helping coworkers, eclipsing your previous best of 150 points!”