Question

I was working on a project a few months ago, and had the need to implement an award system. Similar to StackOverflow's badge system. Badges

I might have not implemented it in the best possible way, and I am curious what your say in it would be.


What would a good way to track user activities, needed for badge awarding be?

Stackoverflow's system needs to know of a lot of information, and I also get the impression that there would be a lot of data processing complicating things.

I would assume that SO calculates badges once or twice every 24, and that maybe logs are stored or a server dedicated to badge calculation.


Thoughts?

Was it helpful?

Solution

I don't think is as complicated as you think. I highly doubt that SO calculates badges with some kind of user activity log (although technically the entire database is a user activity log). When I look at the lists of badges, I don't see anything that can't be implemented by running a SQL select query.

Some of the queries could be pretty complicated, and there might be some sort of fancy caching mechanism, but I don't see any reason why you would have to calculate badges in batches.

OTHER TIPS

In general badge/point systems can be based on two things.

  • Activity log of interesting events, this is effectively the paper register receipt of what has happend such that you can re-compute from the ground up if it's ever needed. Can be as simple as (user_id, timestamp, event_id, event_detail)

  • Most of the time you've pre-designed your scoring/point system so you know exactly which counters to keep on a user. Now it's as simple as having a big record that contains all of the details. (user_id, reply_points, login_points, last_login, thumbs_up_points, etc.,etc.)

Now you can slap some simple methods on that model object and have it manage/store the points as needed.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top