Is the fastest gun in the west problem solved? Is it really a problem?
I had an idea for this that I submitted to uservoice a while ago, but I can't seem to find it now so I'll recreate it:
When casting a vote, the effect of that vote would be delayed for all other users for five minutes or something. You would be able to see the vote effect, so that you could easily confirm that your vote was actually cast. But everybody else would see the effect of that vote five minutes later.
This would allow each answer to be voted on its own merit, at least for the first few minutes. From the point of view of a user, the site would appear to work exactly the way it does now except it would look like everybody else was off having a coffee break whenever you cast a vote.
No matter what Jeff says, Fastest Gun in the West is still a massive problem:
If you are the first to post an answer you have an almost 50% chance of it getting accepted, if you post the 5th answer you only have a 2% chance of getting your answer accepted.
0 50477 46.305 1 26680 24.475 2 14516 13.316 3 7609 6.980
I guess the question is really: is it a problem?
There are several different aims to the site:
- Get a specific answer to a question as quickly as possible for the sake of the questioner
- Get a full, detailed answer to a question over time for the sake of future visitors
- Allow developers to show off :)
Getting a quick answer in serves two purposes:
- It may serve the first site purpose in minutes (or less - I think my fastest was to have an answer posted and accepted while the question was still saying "1 minute ago").
- It shows other potential answerers that you're answering along a particular line of thought. For instance, if I see Marc Gravell answering about a particular topic, even with just a quick answer, I probably won't bother any more; he's likely to say everything I would, unless I've got a completely different idea.
The main problem I see is that of positive feedback - an earlier answer will often get more votes (and keep getting more votes) than a better, later answer. That's not always the case, but it does happen. (And I'm fully aware that I'm usually the beneficiary of that.)
Let's look at whether it's really a problem. To find out, we need to focus on questions that:
- Have more than one submitted answer
- Have one accepted answer
- Have not been closed
Other answers haven't included these criteria, and I think that's a big problem. For example, if you don't filter out questions with only one answer, well then of course the first answer is going to be much more likely to be accepted - because duh, it's the ONLY answer.
If you're playing along at home with SQL Server, the query to find the questions I'm focusing on is:
SELECT COUNT(DISTINCT pQ.Id) AS Questions FROM dbo.Posts pQ WHERE pQ.PostTypeId = 1 AND (SELECT COUNT(*) FROM dbo.Posts pA WHERE pQ.Id = pA.ParentId) > 1 AND pQ.AcceptedAnswerId IS NOT NULL AND pQ.ClosedDate IS NULL
Out of those 88,975 (Oct 19, 2014: 2,379,173) questions, how many of them had the first answer accepted? The query I used was:
SELECT COUNT(DISTINCT pQ.Id) AS Questions FROM dbo.Posts pQ INNER JOIN dbo.Posts pA1 ON pQ.AcceptedAnswerId = pA1.Id WHERE pQ.PostTypeId = 1 AND (SELECT COUNT(*) FROM dbo.Posts pA WHERE pQ.Id = pA.ParentId) > 1 AND pQ.ClosedDate IS NULL AND NOT EXISTS (SELECT Id FROM dbo.Posts pA WHERE pQ.Id = pA.ParentId AND pA1.CreationDate > pA.CreationDate)
Turns out 49,989 (Oct 19, 2014: 1,013,791) of the first answers were accepted, or about 56% (Oct 19, 2014: 42.6%) of the time.
AND (SELECT COUNT(*) FROM dbo.Posts pA WHERE pQ.Id = pA.ParentId) > 1 was missing here.
If the SQL query as it was was really what Brent Ozar used, this number is likely to be in excess of the "correct" number.
The next question would be, "How often was a later answer scored higher by the viewers?" The query I used was:
SELECT COUNT(DISTINCT pQ.Id) AS Questions FROM dbo.Posts pQ INNER JOIN dbo.Posts pA1 ON pQ.AcceptedAnswerId = pA1.Id INNER JOIN dbo.Posts pA2 ON pA2.ParentId = pQ.Id AND pA1.CreationDate < pA2.CreationDate AND pA2.Score > pA1.Score WHERE pQ.PostTypeId = 1 AND pQ.ClosedDate IS NULL AND NOT EXISTS (SELECT Id FROM dbo.Posts pA WHERE pQ.Id = pA.ParentId AND pA1.CreationDate > pA.CreationDate)
Turns out 3,167 (Oct 19, 2014: 128,257) times, a later answer has a higher score than the accepted (earlier) answer.
That's 6.34% of the first answer accepted had a later answer with a higher score in June 2009 and now, in October 2014, it's 12.65%.
With the June 2009 "first answer accepted" statistic suspect, comparing a later answer with higher score as a percentage of multiple answer questions: it was 3.56% in 2009 and 5.39% in 2014.
The SEDE queries.
The premise of the question is invalid: it is based on an assumption that the "fastest gun in the west" phenomenon is a problem, which I believe to be incorrect. One of the problems with forums is noone posts there because it takes a day or two (minimum) to get an answer. The fact that the system here encourages quick answers is a good thing. Usually if you have a programming related problem you need an answer now.
I'm brand new to Stack Overflow and think the speed thing is a problem. I'm enjoying answering questions and love the feedback from reputation. What I hate is writing a detailed, reasoned answer and suddenly getting an Ajax notification "there are 2 answers; reload to see them". I feel like I have to beat the timer. I'm already answering questions more quickly or leaving a short answer to go back and edit later.
I think the solution is to somehow delay votes and randomize the order for a few minutes until several answers come in. Then let the best answer win.
Here's some other data that Sam Saffron put together
Looking only at questions with 5 answers:
Answer # # of Qs Percentage of total 0 2524 26.196 1 1982 20.571 2 1918 19.907 3 1715 17.800 4 1496 15.527
- Answer # is whether that answer was the first, second, third, etc to arrive, and
- # of Qs is the number of questions where that is the accepted answer.
Looking only at questions that received 2 answers within the first 5 minutes
Answer # # of Qs Percentage of total 0 8069 35.073 1 6508 28.288 2 3972 17.265 3 2094 9.102 4 1054 4.581 5 558 2.425
Personally, I think that looks totally reasonable
I don't really think it's a problem. I'm rarely the first to answer, which means I have to write better (or at least longer ;)) answers in order to catch up. I'll never catch up with Jon Skeet rep-wise, but I've got 22k so far, and almost all of it has been earned on questions where I was not the first to answer.
It doesn't really bother me. The questions where "first answer wins" are usually the ones where only a few upvotes are going to be given anyway. In the longer-running questions, where all the real upvotes are given, there's plenty of time to jockey for position.
Two-minute initial no-voting period?
Three-minute prohibition on edits for answers posted very quickly; say, within a minute of question posting?
Here's a metrics question:
Of the questions that have the first 2 answers within 10 minutes, what's the upvote difference between the first and second answers, and is that upvote difference statistically significant?
I've had several occasions where I've submitted a nearly-identical answer within 60 seconds of the first one, and there were a huge difference in votes. Weird... first because I would have expected this forum to be more merit based (as long as answers come in quickly, who cares whether one arrives in 4 minutes and the other 4 minutes 30 seconds), and secondly because why should I care about votes anyway? I have this strange urge to be less rigorous, go ahead and post my quick answer first, then go back and edit it to have the right links & stuff, especially since there seems to be a time period after the initial post when corrections/additions are accepted without it being called an "edit".
I'd suggest deciding what qualities of answers you want first (correct & complete answers that are reasonably quick) and coming up with social rules to encourage those qualities. SO's pretty good but issues like this make me wonder.
is similar to Greg's. But instead of delaying every vote for 5 minutes, I would:
- show the answers immediately,
- but show no votes at all (except your own) for the first 10 minutes or so after the question has been posted. (For viewers, instead of
0the vote field could display
votes show in 3 min).
- Then after the 10 minutes have passed, all votes will be displayed at once, and the usual process takes place, as it is right now (no more delays).
The part of my old answer
for which I got some down-votes and the bashing comments below:
I really feel this being a big problem. That's why I try to commit my answers quickly, only with the main aspects. Afterwards, I'm re-editing it to fill in details (like source code examples) to improve its quality. But this process is:
- not really comfortable, since I have to go over my answer at least twice and I find it kind of stressfull to be one of the fastest guns in the west (especially when some "popups" show how many others have answered in the mean time).
- Sometimes it results in weird comments that are only valid for a couple of minutes, until I have filled in detailed examples.
- Here is an example where I even got a down-vote that was not corrected after I re-edited my answer.
I'll answer from my personal point of view, which is not upvotes, downvotes, selection of the best answer or even reputation. My main concern is: wasting my time, or if you prefer, not being collectivelly more efficient. How many times I have spent 5 or more minutes writing an answer only to discover that another person was producing / had produced a very similar if not exact same one?
Some strategies that I have tried:
- Answer only questions that have been unanswered for a couple of hours. Challenges: To skip questions with only wrong answers (usually just one or two). Not providing additional points of view.
- Answer only questions that after a couple of hours have only 3 answers. Challenges: In many cases the 3 answers are duplicate (and possibly wrong) ones. Very few questions to answer at all; usually only those very badly stated. Additionally, I have noticed that duplicate answers are produced even after much more time than writing it would have normally required. A bit off-topic, but this would mean: a) We are extremely slow typists, b) Many of us abandons SOf for important periods, only to come back and press "submit", c) We answer questions without reading previous answers, or d) We answer question after reading previous answers, probably trying to synthesize the best of them.
- Be the fastest gun in town and try to announce to others my intention of producing an answer with a one-liner, leaving up to them to judge if my sketched answer sounds good enough or not. Challenges: Other contributors percieving that that's all the answer I'm going to produce and elaborating on it (precisely what I'm trying to avoid).
- (Current) Like 3, but being explicit in my intentions of ellaboration. Challenges: Wishfully none.
None of them has worked very well so far.
My proposition is to have the site informing the user that other people is already working on answers as soon as they enter the first character, and not as late as when they press "submit" (way too late, for everybody). Indication of the number of other people, names, reputation, maximum reputation (within the group), response length, etc. could also be very useful to me in deciding if to continue answering or not. Using the language of economics: make it a perfect market, where everything is a personal choice, but as well informed as possible.
Also useful: the ability to queue questions that I have chosen not to answer for later review.
Another alternative is to lock the question for a while. And/or after certain number of answers have started to be produced. However, somehow I'm more inclined for what you could call the liberal model, which also seems consistent with both the philosophy of the site and many opinions expressed here.
If this information is already available, please let me know how to access it.
Maybe it has been suggested before, and it may not be popular, but why not set the timestamp of the answer to the last edit, and sort the answers with equal votes accordingly?
I would argue that there are still plenty of examples where the first or second to answer are not the answers that end up getting selected or with the most votes...