My site contains a page with boxes, of varying sizes, that can be rendered in any order on a grid. Overflow goes to the next row.

I have been instructed to design a system wherein the order the boxes appear on the page is dependent upon how often a given user interacts with each box. So, if a user frequently accesses redBox, sometimes accesses grnBox and rarely accesses bluBox then they should appear on the page in the order redBox,grnBox,bluBox.

User activity is tracked in a way that a log is created for each user showing which boxes were accessed at which times. Activity is also tracked per usergroup.

The problem I have is that I am not sure what would be an effective metric for frequency.

The users themselves given the following directions/preferences: "I want the boxes I use most to be at the top of the page."

Things I have considered (I am open to using any combination of these or a different system entirely):

  • Simple tally system: Boxes display in decreasing order based on number of interactions. I don't like this because if a user heavily uses grnBox for a month but then stops using it altogether, it will remain at the top of the page until another box tallies more interactions. Changes in the page layout will take too long and not properly represent user activity if their use patterns change.
  • Last used system: The last box to be accessed will be the first on the page the next time it loads. I don't like this because the page layout will change too frequently and negatively impact user workflow.
  • Scoring system based on arbitrary time slices: For example, each box could be given 1 points for each access in the past month, 1 point for each access in the past 2 weeks, and 1 point for each access in the past week. The scores could be recalculated server-side on the daily. My main issue here is that I have trouble imagining which time slices to use, how many to use, and how points should be distributed.

I am looking for any suggestions for how to determine use frequency and render the page accordingly in a way that will be responsive, stay responsive over time, and not cause too much disruption for the users.

3 Answers 3


Sometimes taking too many things into consideration will end up creating a system that is too complicated. I think you would have to at least consider more than one dimension for your analysis, which will at least avoid most of the problems that you have outlined, if those are indeed relevant and indicative user metrics.

Take for example your initial suggestion of the tally system, but add another dimension which is the amount of time spent on each item. That way you have a more weighted measure that provides both the quantitative and qualitative factor (i.e. not just how often you interaction with it, but how good the interaction is).

If you want to improve your analysis, you will have a more systematic way to finding the best metrics by adding and removing ones that are not really providing you with the best measure of user needs and preferences.

Of course, as you said it is also possible for user preferences and usage to change, and depending on the frequency of this change you can also adjust your algorithm accordingly.

  • Due to technological limitations I am unable to track time spent in each box. I can, however, track the number of actions taken in each box. I believe that this can serve as a measure of the quality of an interaction. -- I am not understanding your points on over complexity. Where do you feel I am making undue considerations? @Michael Lai
    – Simon
    Commented Jun 16, 2017 at 13:53
  • @Simon I would suggest perhaps tracking the number and type of actions (if applicable) taken in each box to give you a better measure. My point about complexity is that sometimes the effort put into devising a complex algorithm could be better spent trying to find other simpler ways of collecting the same type of data, so it is just something for you to keep in the back of your mind when implementing and interpreting the results.
    – Michael Lai
    Commented Jun 21, 2017 at 22:39

Combination of Last Use and Time-based Scoring System

(a.k.a "Last Used, and Most Used Most Recently")

Assuming your users aren't most likely to use a different box every time, then showing the last used item is something that's at least worth testing with users. You can get around the disruptive effect you correctly anticipated and described, by presenting it alone in a separate area of the UI (see below).

Scoring System

You'll have to play around with point totals, but I think you need a system that is both weighted for recent use, and recalculated frequently.

So perhaps every day you'd look at the log and calculate for each box the number of interactions that took place between that time and various points in the past, and score each interaction based on it's recentness.

  • Interactions between now (calculation time) and 24 hours ago = 5pts
  • Interactions between 24 hours ago and 1 week ago = 2pts
  • Interactions between 1 week ago and 2 weeks ago = .5pts
  • Interactions more than 2 weeks old = No score

This should give a reasonable approximation of "Most used most recently", and the frequent recalculation will mean that something you used a lot last month, but not at all since, will drop down the list relatively quickly.


download bmml source – Wireframes created with Balsamiq Mockups

  • I appreciate your suggestion and I'm going to take your advice regarding the time based scoring system, though it will probably take a lot of testing before I get the numbers right. I like your idea about separating out the last used item but unfortunately most users access multiple boxes per session. If a user's pattern tends to be grn, blu, red it won't help them to have red be featured prominently in their next session instead of grn. You have given me an idea. I'm going to look at the tracking data and see if I can find the first accessed box per session. @dennislees
    – Simon
    Commented Jun 15, 2017 at 20:31

I'd like propose a variant of your "Last used system". What you dislike is ever changing order and I'm sure, I'd hate it, too. I'm assuming that a mostly fixed small number of boxes fits in a row. So my rules were:

  • In the top row show the n most recently used boxes. Don't ever re-order them. I'm assuming that accessing the left-most box is exactly as easy as accessing the right-most one; being in the first row is the prominent position and the exact order doesn't matter.
  • In the second row show the next n most recently used boxes and so on.
  • Variant: Only move boxes between rows at specific times. Maybe only when the user logs out or after a while of inactivity.
  • Variants:
    • Inside of a row, use some logical ordering, if possible.
    • Or: Inside of a row, put the newcommers at the end, when they come from below, otherwise put them at the beginning.
    • Or: Inside of a row, keep all boxes at fixed position as much as possible.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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