Skip to content

gamification: exponential levels and cross-checking #6487

@towc

Description

@towc

Use case
I loved the app for the first day I used it, I found it as an alternative to pokemon go that might provide value to my local community, and makes me look at the outside world more than my phone screen.

Unfortunately after the first 2 days, it's rare that I think of opening it, as I don't typically contribute to OSM, and I just don't get the "happy" feeling or the incentive to go out for a walk with the app open.

Proposed Solution

I've read the gamification proposals I could find, and am aware of the problems presented, but I think there are solutions, so let me start with one that helps address competition-induced quality decay:

1. never have a public leaderboard

Outright have a policy that says "it is not permitted to create a public leaderboard, or publicly distribute instructions for creating one".

The app currently shows you your rank in country and global, which I think is nice, if maybe not already too much. It would help to add some kind of visualizations to show how much of an impact a contribution has. I don't have a clear idea here, but perhaps "(# your contributions) / (# global contributions)", so that you see that number grow very fast at first, and then slow down, incentivizing new users to give a few more contributions. This leads to the next item.

2. non-linear "level-up"

Right now the number of contributions you've given is very prominent and always visible. This number increases linearly, 1:1 with contributions. Past ~100 contributions, this doesn't give much of a feeling of enjoyment to casual users, in fact makes you feel less interested in continuing because of clearly diminishing returns of each contribution.

What games do well is hiding the fact that a single action has negligible impact, by giving you a feeling of progression, and some goals to strive for. Right now the app gives you a link to OSM-related resources every 10 contributions or so, which is an incentive, but I don't know how effective it is. These are resources that don't feel earned, and it's good to spread them, but maybe more by some kind of daily tips, or specific to one "type" of quest, e.g. 10 bike-related quests highlights the relevant resource, then +15 for the next one.

If there was a concept of exponential or non-linear "level" instead, where each contribution functions like "experience" (exp) would in a pokemon game, I think I'd find the app much more fun and use it more often.

In pokemon games, level is essentially k * exp**(1/3), the cube root. k is a value to tweak based on what feels nicer in the given context. 1 exp could be 1 contribution, and the app would already be much more interesting for people like me, showing the level in the top left corner, and a progression bar showing percentage (only!) to next level, hiding total contributions in a stat screen, as a less relevant number.

But we could explore a few more options, e.g. certain types of more needed (or more difficult) quests give different amounts of exp. Quests that you do less often might provide more exp, incentivizing variety. Some quest types might be highlighted for the day or week, giving more exp points, and synchronized among users in that area (or globally), so we all learn more about them and can have meaningful discussions in communities about details.

This last one adds a bit of competition, because if e.g. a curb height quest is highlighted, and there's only so many curbs in the city, you're competing with other streetcompleters (street competers?) to get them before they're taken by someone else, and we need the experience to be cooperative instead, which the next point should help with.

Maybe leaning more directly into the pokemon style to capture that audience would be good (or not), e.g. starting at level 5, and getting progressively closer to level 100. Assigning quest groups as pokemon-like groups (grass -> nature, ground -> streets, psychic -> accessibility). Or starting out with limited (less complex) types of quests, and progressively unlocking harder ones on level up.

3. cross-checking between users

If competition makes you want to lower quality to see the number go up, we can address that by making the number go down disproportionately if the quality goes down.

The basic system would be that a random sample (~1%) of recently (~3 days) completed quests show up for a sample (~50%) of users anyway, and once completed by at least 4 different users (with at least e.g. level 5), some central system compares the results, and if exactly one is an anomaly, it punishes that user.

There's a lot of details to think about here, but iterating is possible.

it's a tricky balance to get punishment right. There will be false positives (of low quality), and you don't want the user to feel that the whole thing is unfair and rigged, but you also don't want to give such a small punishment that they're ok just taking it, like too many people I know do with parking tickets. The main punishment would be removing some portion of exp, but if high-frequency offenses, a ban from OSM/the app would make sense.

In my cursory overview, I didn't see any server code, so I understand that central system might not be easy to add, and concurrency is something to deal with, but it would definitely increase trust in the output of this app regardless of gamification, but also allow some more healthy competition to be used for the greater good.

summary

  1. policy to ban leaderboards that allow you to compare yourself with others
  2. a non-linear level system to increase enjoyment and frequent use
  3. community cross-checking to increase confidence in OSM contributions

I'm a (mostly web) developer and am happy to help, but I've never used gradle or kotlin in anger.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions