Home » Why are vote buttons on Stack Exchange shown when they can’t be used?

Why are vote buttons on Stack Exchange shown when they can’t be used?

Solutons:


Have you ever spend 30 minutes searching for a user interface element or menu item that you knew must certainly be there, only to eventually learn that it had disappeared completely because you were in some state where it couldn’t be used?

Imagine that you don’t know that you can’t vote for your own post, and you have decided to upvote your own post. Or imagine that you recently learned about upvoting, and you have decided to upvote all the good posts about pie that you see to help promote their visibility, and now you are looking at a post about pie which you wrote but which you forgot you wrote. In any case, you’re looking for the UP button.

You might spend an inordinate amount of time looking for the upvote/downvote button; you might even go so far as to waste someone else’s time by asking a technical support person (or posting in meta) saying “Where is the upvote button?”

It is in my opinion a good heuristic not to make things disappear completely simply because the current state of the world is such that that thing cannot be used right now. It is usually better to leave the button there, possibly in a visually different state, and allow the user to try to click it and then have an opportunity to teach them why it can’t be used.

I had answered this question before but unfortunately the person who asked the question got banned for some reason 🙂

The reason is twofold:

  • For design consistency: The placement of the two voting options is there for every question and answer and the design is maintained even for the questionsanswers which you have written to ensure there is design consistency so that users are not confused by its sudden disappearance. You also need to note that you can favorite your own question and if the voting buttons were hidden suddenly, the user who would have used the voting buttons as the relational positioning to to find the favorite option might be confused. Here is an example of me favoriting my own question:

enter image description here

  • To inform users about the number of up-votes a questionanswer has got : While the system doesn’t allow you to vote up your own question or answer, the presence of the voting buttons keeps you informed about how your question is faring and the number of up-votes you have got (and in some cases how many down-votes you have got too).

enter image description here

Now the question that arises is if it won’t irk the user to find out he cannot up-vote or down-vote his questionanswer. I think what Stack Exchange here is relying on is the concept of accidental discovery so that users discover the functionality by accident.

I believe another reason accidental discovery also works is because it saves the design effort of making a specific set of buttons or indicators for the self questions and answers of the user. Even if Stack Exchange did find a suitable alternative, you will need find a way to communicating why the voting indicators look different for the questionanswer the person has posted – which would lead to more confusion)

I don’t have a study for this, but in my script of HCI (EinfĂĽhrung in die Mensch Computer Interaktion, Universität Hagen/Introduction to Human-Computer-Interaction University of Hagen) I read, that the brain can memorize the place of static interface elements better than dynamic ones.

If the buttons are always there and don’t change much (like the content does) it will result in less cognitive demand, over time, to look at the interface.

Related Solutions

Performance issue with this code [closed]

In short: You should create,open,use,close,dispose Connections where you're using them. The best way is to use the using-statement. By not closing the connection as soon as possible, the Connection-Pool needs to create new physical connections to the dbms which...

Compare a pointer to an integer in C [closed]

Here's what I think you meant to post, it still doesn't compile though, since you can't compare a pointer to a char /* *Description: Construction of a social network */ #include <stdio.h> #include <strings.h> #include <stdlib.h> #define SIZE...

Autocomplete json in textbox

If you are using jQuery UI, the jQuery documentation on autocomplete is straightforward. Put your array as the source: and it should work automatically. IMHO, You seriously need to spend some time for googling and looking into the documentations. jQuery UI...

having all my scores and names in one big array

You need to initialize your array outside of your loop: name_arr = [] while int(students)>int(student): name = input ("what is your name ") score = input ("what is your score ") student = student + 1 name_arr.append(name) name_arr.append(score)...

pacman “exists on filesystem” error

After pacman finally deprecated the --force option and made the surrogate --overwrite option work as expected, the following usage pattern should be noted. A command to reproduce the --force option that blindly overwrites anything that conflicts is this: sudo...

How to determine the maximum number to pass to make -j option?

nproc gives the number of CPU cores/threads available, e.g. 8 on a quad-core CPU supporting two-way SMT. The number of jobs you can run in parallel with make using the -j option depends on a number of factors: the amount of available memory the amount of memory...

Number of Nearest ‘True’ in a matrix or list of list

Definitely not the best way to do it, but it's one that works: import numpy as np mas1 = np.array([[True, False, True], [ False, True, True], [ False, True, False]]) mas_answer = np.ndarray(shape=mas1.shape) for i in range(mas1.shape[0]): for j in...

Trying to display Json data from a web url into a table

You can take this json and put it in the loop through length of the json and show data into the table. This is how i solved it <?php try{ $url="the json url goes here"; // path to your JSON file $data = file_get_contents($url); // put the contents of the...

View v is unreachable statement

Anything else is written after the return keyword it's unreachable. Remove return super.getView(position, convertView, parent); from the first line of your function. This is a warning, telling you that static analysis of the code shows that some of your code...

index out of range but is in fact in range [closed]

Well try to debug your code by yourself first. Anyhow for your question Why is this happening? : It gives you error in postCode = split_address[4] because your list has 4 elements 0,1,2,3 and you are accessing the 4th element which is not present.. you don't...

Ubuntu update error: “waiting for unattended-upgr to exit”

I would first try a softer way. Stop the automatic updater. sudo dpkg-reconfigure -plow unattended-upgrades At the first prompt, choose not to download and install updates. Make a reboot. Make sure any packages in an unclean state are installed correctly. sudo...

how to Styling classes with the same name in a file css [closed]

You need to use :nth-of-type(n) selector. // For First Right Class Div #container .right:nth-of-type(1) { } // For First Left Class Div #container .left:nth-of-type(1) { } Hence for every div you need to change n value. Your question is extremely unclear but I...

Java – different parameters resulting to different outputs

What I think you're trying to achieve is that when you call your method "horn" with some parameter it has to either use "Beep!" or "Boop!". First of: void horn(a,b) Is not a valid function signature in Java, in a java function you always have to specify what...

Cannot use method returned value into another method

Using @super's suggestion and a little warning fixing. The two important changes are in the line as suggested by @super: printf("r=%.3f; phi=%.3fn",distanta(),phi()); The variables 'r' and 'unghi' are both variables local to member functions and cannot be...

Class has no member speak? [closed]

void::speak(); //THE GLOBAL SCOPE HAS NO SPEAK It's interpreting this as void ::speak() where leading an identifier (a name) with :: indicates to C++, "Look in the global scope of all names". :: is the "scope resolution operator" In the header file, you should...

Convert code with multiple lines into one line

Read the docs! A simple statement is comprised within a single logical line. Several simple statements may occur on a single line separated by semicolons. Search Stack Overflow! How to put multiple statements in one line? Or google, to find converters for more...

How to POSITION my Marker to Always Follow the Slider-Handle?

Youc can set a position to image using Jquery See fiddle //set a begining position to img var slider = $(".slider")[0]; var sliderPos = slider.value / slider.max; var pixelPostion = slider.clientWidth * sliderPos; $(".img").css("left",pixelPostion-7 + "px");...

css nth-child() check board pattern [closed]

This is pretty simple, as the pattern is repeated over 2 rows of 4, you just need to apply styles to 8n + i for the chequered pattern: .flex { display: flex; width: 400px; /* width of four squares */ flex-direction: row; flex-wrap: wrap; } .square { width:...