10
\$\begingroup\$

I noticed the following flaw in the reputation you get on questions: when a new user (rep 1) asks a question and gets 5 downvotes and then 1 upvote he has 5 rep, but when he gets the upvote first and then the downvotes he'll have 1 rep. Shouldn't the rep you have be independent of the order of the voting?

This could be solved by allowing rep to go negative internally, but clip it to 1 when shown on the page.

By the way, I think the same problem may arise for users who meet the 200 rep daily cap: if you have 200 rep for the day, when you get downvoted first and then upvoted you'll have 200 rep, when you get upvoted first that won't be registered because of the cap, but a later downvote will be registered and you'll have less than 200. Again this can be solved by keeping a count that may go beyond 200 per day, and apply the cap only once at the end of the day.

\$\endgroup\$
1
  • 1
    \$\begingroup\$ If rep goes negative but is clipped to one, then the clipping to one is just a farce. For instance, if you go to -50, you must gain 51 points before your displayed reputation starts to exhibit any change. Storing the value -50 but calling it 1 is pointless. Spades should be called spades. \$\endgroup\$
    – Kaz
    Oct 1, 2013 at 1:56

3 Answers 3

6
\$\begingroup\$

I wrote out the pseudocode for the two systems to explore argument for performance. Take a look.

Key

calculateRep: function called for any change in rep- upvote, downvote, Q/A accept, etc.
displayRep: function called for displaying user's reputation
rep: user reputation
repChange: signed integer representing the amount of reputation given or taken

Current System

calculateRep (
   rep = rep + repChange;
   if rep < 1 (
      rep = 1;
   )
)

displayRep (
   print rep;
)

Proposed System

calculateRep (
   rep = rep + repChange;
)

displayRep (
   if rep < 1 (
      print "1";
   )
   else (
      print rep;
   )
)

I haven't explored the function for redoing the calculation considering the daily rep cap, but if someone wants to, feel free to add it to this answer.

So if calculateRep is called significantly less than displayRep (which would be the case) the current system does appear to have less computational demand than the proposed system. I am not sure how significant that would be on performance, but performance could be a valid argument. Other valid arguments for the current system would be, "we want the rep mechanics this way so low rep users can quickly recover from a long string of downvotes" or "we are busy with more important things, and such a change is too insignificant for us to put resources into changing."

\$\endgroup\$
5
  • \$\begingroup\$ Thanks Travis. This is indeed my proposed solution. \$\endgroup\$
    – amadeus
    Sep 26, 2013 at 7:04
  • 2
    \$\begingroup\$ So imagine if a new user gets 20 downvotes. That means their score goes from 1 to - 39. That means they would need 9 upvotes to get +5. Do you see the HUGE FLAW in that? \$\endgroup\$
    – Passerby
    Sep 27, 2013 at 18:04
  • \$\begingroup\$ @Passe: I see a flaw in a new user writing a really stupid question, getting 20 downvotes, but then only a single upvote puts him back at +6. However, the bigger point is that is not how the system is architected. In the end this order-dependence is a minor issue, and I'm sure the SE developers have plenty of real problems to deal with. \$\endgroup\$ Sep 29, 2013 at 13:41
  • 1
    \$\begingroup\$ @Passerby: it may not be the end of the world, but like in Olin's example: somebody with 20 downvotes shouldn't get to +6 for that isolated upvote. Also, this would be VERY EASY to mend, like travis' answer shows. \$\endgroup\$
    – Johan.A
    Sep 30, 2013 at 7:35
  • \$\begingroup\$ I think part of it is trying not to scare off new users. If they get 20 downvotes and their score becomes -39, they are much more likely to give up on the site and never return because of that negative reaction. If they get 20 downvotes and their score stays one, they are less likely to leave, but more likely to not learn anything and continue making bad posts. \$\endgroup\$ Oct 2, 2013 at 3:09
1
\$\begingroup\$

The minimum reputation is 1, never 0.

If a user gets 5 downvotes, then an upvote, they will have 6 reputation.

If they get 1 upvote then the 5 downvotes they will be at 1 reputation.

Shouldn't the rep you have be independent of the order of the voting?

We record what happened as it happened, so no.

\$\endgroup\$
12
  • 12
    \$\begingroup\$ But is there a rationale behind this choice? In fact the OP seems to have a point. \$\endgroup\$
    – clabacchio
    Sep 25, 2013 at 14:10
  • 7
    \$\begingroup\$ I find it hard to believe that you think it's normal that 1 upvote + 1 downvote is not the same as 1 downvote + 1 upvote. \$\endgroup\$
    – pebbles
    Sep 25, 2013 at 17:01
  • 1
    \$\begingroup\$ @clabacchio - we go by the order of events. As they happened. Not an aggregate. Why? Performance. \$\endgroup\$
    – Oded
    Sep 25, 2013 at 17:05
  • \$\begingroup\$ @pebbles - Order matters. They are not the same thing. They happened in different orders. Otherwise - (2 * 3) + 4 == 2 * (3 + 4) \$\endgroup\$
    – Oded
    Sep 25, 2013 at 17:06
  • 8
    \$\begingroup\$ But order shouldn't matter! I know they're not the same thing, but they should be. -2 + 5 == +5 -2. Notice that if the user already has, say, 100 rep the result for both situations actually is the same! OP is right, this is a flaw. \$\endgroup\$
    – pebbles
    Sep 25, 2013 at 17:14
  • 2
    \$\begingroup\$ @pebbles - This is how the system works and has worked from day one. Yes, it can be annoying - but the decision was to treat votes as events - things happening one after the other, with the effects of each event occurring naturally. \$\endgroup\$
    – Oded
    Sep 25, 2013 at 17:22
  • 6
    \$\begingroup\$ @oded: "This is how the system works and has worked from day one." What you're saying here is that you should never ever make improvements, because they will change how it has worked from day one. :) \$\endgroup\$
    – amadeus
    Sep 26, 2013 at 7:03
  • 1
    \$\begingroup\$ @amadeus - That is not what I said. But this issue can be seen from both perspectives and is not something easy to change - it would require rewrites to quite a lot of code, changes to our architecture and more. \$\endgroup\$
    – Oded
    Sep 26, 2013 at 8:00
  • \$\begingroup\$ They all voted on day one, but stopped counting when the issue had enough votes to pass. That's when the single dissenting vote came... :/ \$\endgroup\$
    – Samuel
    Sep 27, 2013 at 7:15
  • \$\begingroup\$ @pebbles more like if (n - 2) < 1, n = 1 else n = n - 2. \$\endgroup\$
    – Passerby
    Sep 27, 2013 at 17:02
  • 1
    \$\begingroup\$ It seems the real problem is that rep is clipped at +1. At the very least is should be clipped at 0, not 1, but even better would be to let it go negative. If someone has -20 rep or less, the system could automatically replace his avatar with a brain and a red circle with a slash over it. \$\endgroup\$ Sep 29, 2013 at 13:46
  • 1
    \$\begingroup\$ @OlinLathrop - Consider our +1 to be 0. This has been decided on from day one and I can't see it changing (the reasons for it are social rather than technological). A negative reputation will not happen for similar reasons. \$\endgroup\$
    – Oded
    Sep 29, 2013 at 15:42
0
\$\begingroup\$

By the way, I think the same problem may arise for users who meet the 200 rep daily cap: if you have 200 rep for the day, when you get downvoted first and then upvoted you'll have 200 rep, when you get upvoted first that won't be registered because of the cap, but a later downvote will be registered and you'll have less than 200. Again this can be solved by keeping a count that may go beyond 200 per day, and apply the cap only once at the end of the day.

As someone who has hit the daily cap multiple times, you are wrong about that. It's not counted by the individual votes, its the total. If you get 20 upvotes (10 * 20) and 1 downvote (-2), you will have 198 no matter what. If you get 21 and 1, you will have 200 no matter what order the up or down votes come in.

\$\endgroup\$
5
  • \$\begingroup\$ If you get an upvote after the downvote (198) you'll be at 200 again. But if you have an upvote when you're at 200 you'll stay at 200. A downvote after that will get you 198. So the order of votes determines whether you have 200 or 198 IMO. \$\endgroup\$
    – amadeus
    Sep 29, 2013 at 8:16
  • \$\begingroup\$ @amadeus do you have a screenshot to support this or what, because both times I broke the limit, I had 245 from a ton of upvotes, three accepts, and -2 of my downvotes, which according to you will mean I should have 243. (accepts are not included in the 200 upvote limit) \$\endgroup\$
    – Passerby
    Sep 29, 2013 at 9:06
  • \$\begingroup\$ Sorry, no screenshot, but maybe you can check this on your own rep. IMO you have 245 because you had at least 1 upvote after the downvote(s). If the downvote was the last vote you got you would have had 243. \$\endgroup\$
    – amadeus
    Sep 29, 2013 at 9:34
  • \$\begingroup\$ @amadeus so you mean the situation where 21 upvotes (210) and 1 downvote (-2), with the downvote being the latest one? I still believe the total would be 200 instead of 198. \$\endgroup\$
    – Passerby
    Sep 29, 2013 at 9:38
  • \$\begingroup\$ I can't seem to find a day when you had 200 rep (or 198). When was that? BTW, congrats on your caps! \$\endgroup\$
    – amadeus
    Sep 29, 2013 at 9:41

You must log in to answer this question.

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