How to treat outdated questions/answers?

On SO, you can sometimes see QA-pairs that are well written, has high score and made perfect sense when they were written. But today, they are extremely outdated.

It can be the situation that the answer is based on the features available in a language at that time, but more recent versions of the language standard makes the old answer to just seem like an ugly hack.

One example could be for loops in C89 vs C99. In C99 you can declare the loop counter to be local to the loop, which in terms of design is a massive improvement.

/* C89 */
int i;
for(i=0; i<10; i++) {
/* Loop body */
}

/* C99 */
for(int i=0; i<10; i++) {
/* Loop body */
}

There are probably way better examples and I’m not looking for discussing this particular example. My question is about how we should treat these kind of questions. Where an approach that was sane and standard back in the days is considered very bad code today. One problem with these questions on SO is that they are often popular and show up early in google searches.

On SO, the usual advice is “Write a better answer, and if it’s better it will rise to the top.” As we all know that does not happen. Also, in one way I think it is wrong to “punish” those users who wrote an answer that was good then by downvoting them today.

I think a sound approach is some kind of archiving. The question and answer should still be visible, but it should be very clear that it is considered outdated and that the answers should be taken with a grain of salt. As with previous suggestions from me, of course this can have it’s flaws and details can be discussed, but I propose something like this:

  • On old questions (at least two years?) you can close vote for archiving
  • An archived question does not accept more answers
  • When you view an archived question, there’s a big banner telling you that the content may be outdated
  • The post also gets a wiki box that can be edited by users to provide details

For the above example, the wiki box could have this content:

This question was posted when C89 was the defacto standard. Today C99 is the most common C-standard and it allows much better ways of solving this problem.

Deleting the questions would be very bad. Such posts can be very interesting to read from a historical perspective.

What do you think?

3 Likes

I think categories can work for this, too. Just make a category “outdated questions” to which such questions can be moved. That way they are still available, but they won’t show up in main content. In particular, I would not allow to mark a question as duplicate of an outdated question.

We already had a (fuzzy) discussion about this here: Dealing With Obsolete Content

This all boils down to the fact that lots of people out there are maintaining old code bases. When doing so, they need to be able to ask questions and they need to be able to find information about outdated technologies.

Just look at something like the Visual Basic 6 tag at SO, it is quite active still.

5 Likes

Also, just to illustrate how problematic it is to have users poking around with posted content, just because they personally believe it is “outdated:”

/* C89 */
int i;
for(i=0; i<10; i++) {
  a[i] = b[i];
}
a[i] = '\0'; // works like a charm

/* C99 */
for(int i=0; i<10; i++) {
  a[i] = b[i];
}
a[i] = '\0'; // oops

And now some “helpful” editor comes in and waves an obsolete flag on the correct C89 version, or decides to change it to the broken C99 version. Massive potential for accidental vandalism, no thanks.

3 Likes

Agreed, but there is a difference when a question is specifically aimed at VB6 compared to a question that just asks for how to do something in VB. But yeah, it will probably be a lot of cornercases.

Strong argument. Need to ponder about that.

1 Like

I think the ability to tag questions/answers as being for a specific version of a language would be very useful in an SO-alike. I have often had to wade through various questions/answers to find the one that applied to the old library I was trying to maintain, with very little that indicated which was which.

I don’t know if there are comparable use-cases for other sites?

1 Like

On SO this is normally ideally treated via potential duplicates which change the focus of the original question to a specific version, and change the focus of the potential duplicate to a newer version, keeping both intact. I don’t think that is the ideal solution, so I’m not sure what should happen with codidact.

Maybe make it so that only editors with experience in the tags can do such things?

Also, are we talking about obsoleting/archiving entire questions only, or would there be an option to archive individual answers as well?

1 Like

If a question was asked generally and its answers were all based on conditions that were true then but don’t apply now, I’d prefer to edit the question to retroactively make it about that original context. In this example, somebody asked a VB question, and now, years later, we decide the answers only apply to VB6 – so make the question about VB6 and let it live on for people who are still using that. Is that feasible?

3 Likes

I would really like to agree on this. But that was one of SO:s visions that failed. Usually, other posts only gets edited for spelling errors and such. In general, people don’t want to edit other posts so that they completely change. And people don’t want their posts edited by others either.

So no, I don’t think that’s a preferable solution.

Well, we do have an opportunity to set new norms on our new sites, so long as they make sense and we communicate clearly about them. I wasn’t active on SO so I don’t have that context, but it seems like something that could work here if we decide from the beginning that that’s our approach. This kind of edit doesn’t massively rewrite the question or put words into the OP’s mouth; it’s a narrowing of a no-longer-current question, to allow the older and newer contexts to exist in separate questions without people having to navigate a bunch of answers that start “in version X you do it this way” or, worse, “do it this way” and nobody knows what version it assumes.

3 Likes

I’m ambivalent, but I think I gravitate towards respecting (not implying that you’re disrespectful) the authors right to their own post. I think I would prefer posting a new question instead.

As tags were mentioned before, maybe the post could just be re-tagged. So in the VB example, re-tag (or add the more specific tag) the question as VB6, instead of just a generic VB tag.

Some questions can be applicable across versions though, with only the canonical response changing.

A common sight in jQuery was a question of the form “What is the best way to do X?” which is a valid question across all versions, but for which the answer differs across major versions.

Frequently I would see an answer that had been edited to include a remark about “This answer is correct for version 1.x, but see the additional edit for the new way that this should be done in version 2.x”.

Would some of the issue here not go away if the ANSWERS could be tagged or otherwise categorized?

In the c89 vs c99 example two valid answers each marked that they apply to a specific version (assuming the question was not version specific) seems a reasonable outcome and should make the question easier to find in search in either case.

One of the more annoying side effects of the heavy-handed moderation in the SE sites was their fall in search result prominence. This would likely help address that a little as well because you would get both answers if you searched “for loop in c”

1 Like

I have an alternative of this suggestion, which would be that when a new version of [e.g. some language] comes out, the tag itself gets replaced to the old version. As in, using the C example, pre-C99, all questions about C89 would have been tagged as ‘C’. When C99 got released, some process could be used so that all questions tagged ‘C’ would have been automatically re-tagged ‘C89’ (and perhaps even moved to retrodidact?), freeing up the ‘C’ tag for questions about C99.

Then if any questions about C99 get asked where the same question about C89 has also been asked, people can vote to copy the old answers across to the new question. This means that if something in C99 changes or is discovered that invalidates those answers, they can be changed without affecting the C89 version of the question

But then what about those questions (probably the majority?) that aren’t dependent on the particular version. In your example, what about the C89 questions where the answer apply just fine to C99?

4 Likes

As Olin said, I don’t think this would work. Some posts may also be looking ahead at the pre-release and get improperly tagged as a result.

Maybe we could suggest a tag update through some process, and users can approve/deny it after seeing the prompt on the question?

1 Like

I have an idea that could be either an extension of the tags, or an entirely separate feature: answer tabs.

For questions where the answer doesn’t change in between versions, there will be one tab (probably hidden), but once things have changed between versions as in our example, a new tab can be created. This way the original question doesn’t need to be altered, but significant version differences get their own space, their own best answer, etc.

Plus, this can work on non-programming based sites as well! For instance, a Christianity based site could use tabs for Catholic, Lutheran, Baptist, Nondenom… Or a world building site could answer more general questions using tabs for different setting types if the question isn’t specific; one for high fantasy, one for low fantasy, one for sci-fi, one for historically correct, and so on.

3 Likes

This is actually close to the Category idea we’ve been discussing.