I've got a web app in which there are several different user roles (standard users, moderators, admins etc). There are various actions that admins can take that moderators can't; there are actions that moderators can take but standard users can't.

At the moment, the buttons that trigger these actions are rendered on every request to the page, regardless of whether there's a user logged in or whether they can actually use the button or not.

My two options are to do what I'm doing now (render the buttons for every request), or to do some additional checks and only render the buttons if they can actually be used.

The advantage of the latter is that at face value it seems like better UX. However, doing those additional checks will take a not-insignificant chunk of server time, so the page will load noticeably slower.

Which of these two options is better in a UX context?

  • Is there a way you could cache all the privileges for each user on the server-side? Or maybe add indexing somewhere to improve load time? I think it is better to focus on speeding up the system in order to give the user a better user experience. And showing buttons that users can't use is not a good user experience. Jun 21, 2016 at 18:07
  • @Andrew I'm also looking into doing that, but the system is fairly complex so querying it correctly takes a while. Caching and indexing can only alleviate that to a certain extent.
    – ArtOfCode
    Jun 21, 2016 at 18:49

3 Answers 3


Of course it is better to eliminate unnecessary elements on the interface.

The big question is how much slower it would be if you implement those additional checks? In my opinion a several checks would not noticably slow down the interface so try to do it. If you have good developers you will find a way to optimize your code.

Also, leaving the normal user to see the admin/moderator links is not good for security. This will also bring user confusion because they will start to think they have admin rights or the website is buggy, etc.

I would definitely advise you to do those checks and remove the unnecessary buttons in order to improve the usability and security of your app.


There is no way to answer that question in general. First, there is no single metric of "better". You could try to use some common metric like overall satisfaction, but maybe some other metric is more important to you, like user retention. We can't tell which one you need.

Second, even if we were to agree on a single metric, the ways in which a negative UX factor will affect it for your application is not predictable. It is not even known in general - believe me, I've seen dozens of regression models of HCI variables on satisfaction and they don't agree much. The only roughly usable advice I know for your case are Nielsen's speed limits, but it will only help you if the both versions are very clearly on the two sides of a single limit and you are certain you need to stay under this limit. And this certainty is rare - sure, loading times of 0.1+ seconds can interrupt the user's flow of thought, but thinking "hey, which button was I supposed to click" will also do it.

In the end, the only way to know is to test what is true for your application. You have to make sure it is good research - representative users, well-defined goals, etc., else you would be making decisions based on misleading metrics.


I would suggest you should be focusing on the user journey and based on that with the kind of mental load the users have(while using the product), take your decision. In some cases providing unnecessary/useless/redundant options (buttons in your case) might dramatically increase the friction. No harm in cleaning up unless you are hiding useful things. Cleaning up or reduction comes before speed.
Still it's contextual, you can try this.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.