Stack Overflow Homepage Changes

As I mentioned in The Horror of No Answer: Revival and Necromancer:

It’s fine — expected, even — for there to be a “long tail” of questions that are too obscure, too narrow, or just plain unanswerable for whatever reason. Sometimes you have to be patient; it takes the time it takes. But seeing the number of zero-answer questions grow by 50% over a 3 month period is definitely concerning. Part of this is our fault for not adapting the homepage to the massive amount of question activity that Stack Overflow now enjoys. We’re working on it, but it will take some time to figure out the right approach.

The default question ordering on the home page is a simple, flat list of the most recent (n) questions sorted by activity date -- where activity is defined as a new answer, an edit, or a new question. Sophisticated, it ain't, but it has worked well for us up to a certain volume of activity. Stack Overflow is now well beyond that volume.

I asked for help redesigning the Stack Overflow homepage on meta, and the consensus was to keep the same design (for now), but try to show more relevant questions to each user.

We began playing with experimental question weighting algorithms to decide which questions to show to a particular user. Sam Saffron set up a clever little experimental home page where you can have a play with the algorithm client side and see what weightings produce the best fit for you.

As of today, we've rolled this change out based on your feedback. On Stack Overflow (and only Stack Overflow) the default home page tab has changed from active to interesting. The goal is no longer to show you a simple flat list of the last (n) active questions -- that's not even possible any more based on sheer question volume -- but, instead, to narrow the list to a subset of active questions that we think you will be interested in.

Here's how it works. Starting with a list of the last 3,000 active questions:

  • drop questions containing any of your ignored tags
  • drop closed questions if you lack the reputation required to vote for reopening
  • drop questions scoring -4 or lower

Next, apply the following score formula to the remaining questions:

your interesting tags +1,500 per interesting tag, up to +2,000 total your top 40 scoring tags maximum of +1,000 per tag (scaled), up to +2,000 total question score +200 × score, up to +1,000 total total answer score -200 × score, up to -1,000 total number of answers -200 × answers, up to -1,000 total number of views -15 × views, up to -1,000 total question last activity date -1 × (seconds / 15)

Count it all up and take the top 90 by score.

We also mix in a few random questions from the last 3,000 -- 10% (9) for logged in users and 20% (18) for anonymous users. We're like DJs trying to spin a mix of songs -- some you might know by heart and love, others you might not have chosen for yourself, but could possibly like if you gave them a fair listen.

The resulting change in the homepage is fairly dramatic. Here's a screenshot of the old Stack Overflow homepage (the active tab) compared to the new Stack Overflow homepage (the interesting tab):

Quite the sea of red unanswered questions, which seems to meet our goal of giving questions which haven't yet gotten a good answer, more time on the homepage to get one.

You can compare yourself by viewing the old "active" tab at http://stackoverflow.com/?tab=active and comparing that to what you get shown -- both as a logged-in user and as an anonymous user.

I'll be honest with you, this change makes me nervous. It's like Colonel Sanders mucking around with his magical blend of 11 herbs and spices. But at the same time, the old simple "questions by activity date" homepage default was clearly not working with the 2,000+ questions being asked on Stack Overflow each and every day. Something had to change.

Well, this is that change. Let us know what you think, and feel free to experiment with alternative weightings if you have ideas for ways to further improve upon it.

Login with your stackoverflow.com account to take part in the discussion.