Currently, we do badges based on counts of badges you should have (at this point in time) vs what you do have (again, at this point in time). This behaves in the following way:

  • Let's say user A (user chosen at random) has 10 questions with a score of +10 or more
  • Someone downvotes, or in this case a user is deleted and a previous question (#1 in the list above) no longer has a score of >= +10
  • The badge grant runs, the user has 9 nice answers now, the job does nothing to this user
  • ...later...
  • The user gets +10 on a new answer, but again the job does nothing - because the count of badges they should have still isn't greater than the badges they have

So from one point of view, the user now has 10 nice-answer worthy posts, so the count is correct (though the reasons are wrong, since the first link is no longer a +10) From this view, they should have 10 badges and do have 10 badges.

From another point of view, the user did have a nice answer when that badge was awarded, and they do have a nice answer on their now 10th (would have been 11th) answer, so did they get gypped out of their 11th badge? From this view, they should have 11 badges and only have 10.

The first point of view above is the way the system currently works. The second is what we're proposing (mainly for performance reasons - but also having the "reason" or post link be correct in as many cases as possible). This would result in some badges being rewarded on the day it goes live (the case above is a literal example). In total 2,216 nice badges would be awarded.

So the question is which view is more correct? Should this user have 10 badges, or 11 with one that was valid at the time, but not now (never revoked).

Update: This went live tonight: July 6th, 2011

share|improve this question
I thought that few badges were removed. For example, the badge about creating a tag used by X questions is still kept, even when the tag doesn't exist anymore. –  kiamlaluno Jun 29 '11 at 0:35
@kiamlaluno - that's correct...this isn't dealing with removal/revoking but granting. In the example above the 11th badge wasn't revoked, it was never granted because of how the current code (based on counts) works. –  Nick Craver Jun 29 '11 at 0:39
I apologize; I read it giving the opposite meaning. –  kiamlaluno Jun 29 '11 at 0:41
I think a lot of the problem (but not all) would disappear if we counted deleted questions for badges. –  Lance Roberts Jun 29 '11 at 6:29
How does this work with the "revenge voting" problem two posts up? If I downvote a person's "10" answers, will that strike a bunch of his badges? Would hurt! –  Bo Persson Jun 29 '11 at 8:57
@BoPersson - It wouldn't revoke them, no, but in the current system it would prevent the next n badges from being awarded. –  Nick Craver Jun 29 '11 at 10:11
How would this work for “fickle” badges like Reversal (easily undone by a question upvote) or Tenacious (easily undone by a few answer upvotes)? –  Gilles Jun 30 '11 at 0:07
@Gilles - in the same way, if you earned the badge on a new post, you'd get that badge, even if an old one no longer qualified. The simple version: the current system looking at counts would not award this badge, the new one would award it. –  Nick Craver Jun 30 '11 at 0:10
@Nick, so how did this get implemented? Does it just count all the deleted posts also, so that the numbers work out? –  Lance Roberts Jul 7 '11 at 3:32
@Lance - We now see if you got the badge for that thing (post, tag, etc) rather than do you have X badges, so we see exactly which things you're missing badges for, and award those...this also worked out to a major performance and functionality advantage. –  Nick Craver Jul 7 '11 at 3:35
@Nick - I see that the system just awarded many many new badges, and that's fine. I found out I had a Nice Answer for a question that was 9/0. That got me thinking, how fast does the badge grant run, if, in my case, I got it before somebody undid an upvote? And if it does run very quickly after an upvote, won't this result in many grants for posts with undone upvotes at +9 that didn't even stay at +10 for a significant period of time? –  NickC Jul 7 '11 at 4:04
@Renesis - some badges run more often than others, the job itself runs every 5 minutes. Can you be awarded one for something that later doesn't meet the criteria? absolutely. We're concerned with did you earn the badge at that time. –  Nick Craver Jul 7 '11 at 4:16
add comment

5 Answers

up vote 18 down vote accepted

so did they get gypped

Yes, I think so. It isn't just the number that they got gypped on, but the recognition. They got gypped out of the recognition for contributing great content (or whatever the contribution for that badge is). If I look at their "nice answer" badge page, there is no recognition for that post.

The current process is a little funky anyway. "True user" creates sockpuppets to upvote posts of the "true user". "True user" earns badge. All sockpuppets are merged in, and "true user" still holds badge. (Also a literal example.) It is almost like we're doing things halfway. Either revoke badges, or award people for new accomplishments as they earn them. Since badges earned improperly are the much rarer case and much, much hairier, I'm ok with that not being handled as part of the automatic process and only handling it manually when it is truly malicious.

TL;DR: Yes, award and recognize people for their accomplishments. It'll cut down on the meta support posts we get asking why a badge wasn't earned too. (:

share|improve this answer
+1 I agree, but only if you begin revoking badges as well... –  davidsleeps Jun 29 '11 at 0:51
You're just looking for another badge huh? ;) –  jcolebrand Jun 29 '11 at 3:07
Could there be a badge for having your first badge revoked? –  M. Tibbits Jun 29 '11 at 4:21
You're going to get a lot of posts that ask where didz my badgz go? –  Lance Roberts Jun 29 '11 at 6:28
@LanceRoberts, I am not proposing we start revoking badges. –  Rebecca Chernoff Jun 29 '11 at 6:29
@Rebecca, ok, I see that with closer reading. If we just had the badge script count deleted stuff in its calcs, it would eliminate a lot of the problem. –  Lance Roberts Jun 29 '11 at 6:31
@Lance - sometimes this is true, but not always, deletion isn't the only thing that may cause a trigger to no longer meet the trigger requirements, post or otherwise. For example, an answer that was a +10/0 and is now +10/-1 would no longer meet the requirements for nice answer...there are several cases of this, another is ViewCount which we don't have a history of. –  Nick Craver Jun 29 '11 at 10:23
Sweet, so I'd get a silver badge for saying that the Java equivalent of "pythonic" is "enterprisey". That's clearly a quality answer deserving of two badges. –  mmyers Jun 29 '11 at 12:46
add comment

I vote for what you're proposing. It's easy enough to see that a post that falls below the requirements for a badge after the badge was awarded had done just that.

In my mind the current way is quite confusing, especially to new users. It happened to me just the other day here on MSO. I crossed 25 upvotes on an answer and never got the Good Answer. On top of that It was also the first (only) answer and got accepted but I never got the Enlightened. I looked through my badges and was able to explain it away (questions deleted that earned me other badges), but that's because I know how it works. I'm no badge-whore, but it is still cool to get them when they come.

I see no harm in changing it.

share|improve this answer
add comment

I have two other options:

1) To show "revoked" badges as such (with the link) in a separate list. So you can keep track of badges you once had.

2) To change the definition of these badges. For example Nice Answer means, you once had 10+ upvotes for this answers.

Of course, badges aquired through vote fraud need to be burniated.

share|improve this answer
In the case of revoked badges we actually hard delete them so the re-awarding process can take over accordingly (and award all current badges they should have, like in the case of an SE 1.0->2.0 migration). The revoking also is a very exceptional case, sock puppets or a bug in the badge itself are the only reasons I can think of where this has happened...we don't want to revoke you badge because someone downvoted and it no longer needs the requirements...we tend to think it did meet the requirements, you earned it. But...clarification to descriptions is certainly on the table if needed. –  Nick Craver Jun 29 '11 at 10:21
add comment

Just to play devil's advocate here: doesn't this reward bad behavior? Here's a possible scenario:

  • Currently

    Joe creates 100 sockpuppets so he can get the Great Answer badge. He gets the badge and a suspension, but when he comes back he's still got that badge.

    Jack might be annoyed that Joe has that badge, but he can console himself by thinking that, well, if Joe ever does something to deserve a Great Answer badge, at least he won't get another one.

  • Proposal


    Jack? He's annoyed that Joe got that badge.

    Jack's more annoyed when Joe does it again a month later.

    Jack is really annoyed when Joe does it again six months later.

    From Joe's perspective, why should he stop? This is working great—for him.

You can either award badges doing calculations and not give new badges for later, duplicate badges,
or you can calculate badges on the fly and also figure out how to remove unearned badges.

But if you hand out badges with no checks, and never remove badges once given, that gives the big payoff to the people who game the system.

share|improve this answer
These are two separate the sock puppet case we'd absolutely revoke the badges (there's another manual mechanism to do this)...but that's totally separate from the awarding process. Calculating them on the fly isn't really realistic, since for example on great answer we'd have to walk the vote table for every answer they had. –  Nick Craver Jun 29 '11 at 10:14
add comment

I think I'm in favor of these new badge-awarding rules, but I can't help bringing up a case that I didn't see anyone mention above: migrated questions.

For example, I now have Nice Answer, Good Answer, and Great Answer badges on both SO and Programmers for this answer which was migrated between the two. Is it "right" that this set of badges has been duplicated on each individual site? Is this an intended side effect of these new rules?

share|improve this answer
This would have happened under the old system as well, keep in mind that unless you had prior deleted content preventing the count from exceeding and granting the badge, you'd have gotten one before the answers were deleted on migration...and on the destination site. So really, the effects around this haven't changed. –  Nick Craver Jul 7 '11 at 3:33
add comment

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .