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
- 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