Page MenuHomePhabricator

Investigate TwoColConflict opt-out bug
Closed, ResolvedPublic3 Estimated Story Points

Description

In T257577: Investigate TwoColConflict opt-out metrics, explain whether there's a trend, we found 600,000 users opted-out of the TwoColConflict beta feature. These must be phantom opt-outs. Investigate:

  • What is the bug causing this to happen?
  • Does the bug behave differently on wikis where TwoColConflict is in beta and where it's default?
  • Have we lost any legitimate opt-out data?
  • Can we collect legitimate opt-out data going forward?
  • Write a follow-up task to fix the damage.

Event Timeline

awight set the point value for this task to 3.Aug 12 2020, 3:11 PM
thiemowmde added subscribers: Lena_WMDE, thiemowmde.

The relevant piece of code is, I believe, this one here where we migrate the user's Beta setting to the real one: https://phabricator.wikimedia.org/diffusion/ESCC/browse/master/includes/Hooks/TwoColConflictHooks.php$340. The assumption here is that the $options array might still contain a value for the Beta preference. We migrate this value only when it is the number 0 (but not when it's the string "0"), and then delete it.

There are 2 sources where this value can come from:

  1. It's actually in the database.
    • This is the case when the user actively enabled or disabled the Beta feature. In either case it's fine when we migrate that.
    • When the user enabled auto-op-in and visits the preferences page, the string "1" is actually stored in the database. I just manually confirmed this. Just visiting is enough.
  2. There might be a default value. There is none.
  3. As it turns out there is another source. Wait for it …

I started manually testing different scenarios, cleaning the database first:

  • Auto-op-in enabled, visited preferences without touching them, never disabled: It's properly migrated to be enabled. Visiting the preferences again or changing them doesn't change that. All good.
  • Auto-op-in enabled, user can't even disable it. That's intended, see T170055. No problem for us.
  • No auto-op-in, never visited preferences, migration away from Beta works fine.
  • No auto-op-in, visiting preferences without touching them, nothing is stored, migration works fine.
  • No auto-opt-in, visiting preferences and changing something else, leaving TwoColConflict off. This is actually stored as 0. We migrate this. And that's wrong.

In other words: We have no idea if a 0 in the database means that the user actively disabled the Beta feature, or just never touched it. The "migration" we do right now means we disable the feature for all users that made some unrelated changes to their preferences since TwoColConflict is a Beta feature. That's certainly not all of them, but probably a high number. Probably exactly the number we see. :-(

Thank you for the initial investigation into opt-out scenarios!

Could we also investigate whether there's some way to distinguish between the intentional and unintential opt-outs within the database? In other words, can we determined a list of users who made the active choice to opt-out? This would apply both for past data and future data. If it's not possible for past data/current data being collected, then is there a way for us to start collecting this data from now going forward?

I believe there is no way. See, when you visit your preferences, and there is a new Beta feature (which is off by default, as it should be), how should anyone know what it means when you don't touch that checkbox? Was this intentional?

Even if we somehow track users that enable a Beta feature and disable it later, do we really know what this means? Maybe it was a mistake and the user never ever experienced the new TwoColConflict interface? Maybe it was a very early stage and the user disabled it because of a bug that is long fixed? Especially the later is – in my experience – extremely common. When users say they don't like a new thing it's typically because of one or a few very minor issues. Sometimes as minor as a bad localization. I believe the majority of the decisions we see are something like this, and we should not keep these forever, as if the feature we actively develop never changed since these few users furiously disabled a – by definition – incomplete Beta feature.

If it's not possible for past data/current data being collected, then is there a way for us to start collecting this data from now going forward?

I'm optimistic about this. The preference form is currently not designed to preserve this information, but there's a very good argument for why this is important, and I can imagine trivial implementations such as making the "tri-state" visible, so explicit vs implicit opt-out is detectable. Event handlers in the form and comparing form entry and exit states should make it possible to see a real opt-out. Will require coordination with the BetaFeatures maintainers.

Lena_WMDE claimed this task.
awight renamed this task from Investigate TwoColConflict out-out bug to Investigate TwoColConflict opt-out bug.Sep 2 2020, 3:30 PM