Skip to content

mappy days within recent history #20

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
matkoniecz opened this issue Jan 2, 2022 · 5 comments · Fixed by #25
Closed

mappy days within recent history #20

matkoniecz opened this issue Jan 2, 2022 · 5 comments · Fixed by #25

Comments

@matkoniecz
Copy link
Member

matkoniecz commented Jan 2, 2022

Right now API serves total count of days with at least one edit.

I want to add also statistics about how many days with active mapping happened in the last history.

Initial idea (1)

"recentDaysActive": 19

but that requires hardcoding how many days count as recent in sc-statistics-service and StreetComplete and potential changes need to be coordinated.

Next idea (2) - return also info how many days were taken into account. This way it is defined in one place and just modifying statistics service will result in changes to what SC displays.

{
"recentDaysActive": 19,
"recentDaysActiveRange": 31
}

Next idea (3) - show data day by day

recentDaysActive: {
"2021-12-29": false,
"2021-12-30": false,
"2021-12-31": true,
"2022-01-01": true,
"2022-01-02": true
}

or just list of recent active days

recentDaysActive: [
"2021-12-31",
"2022-01-01",
"2022-01-02"
]

While it would transfer more data and requite nastier SQL to construct it has some benefits.

It would allow to immediately after an edit to update profile statistics. Instead of waiting for statistics service to update.

It would be possible to show per/day statistics like this one (with binary yes/no coloring)

screen

@westnordost
Copy link
Member

You should first think about how this data would be used, and then look into how to transmit it and implement it (in the backend).

  1. What exactly do you want to achieve? What is the goal? I mean not "to display this and that" but why display it?
  2. What UI exactly would best achieve this goal? So, you would like something like the statistics on GitHub, or something similar to it? A statistic like that certainly doesn't fit on a smartphone screen

@matkoniecz
Copy link
Member Author

matkoniecz commented Jan 3, 2022

I want to create something that would

  • not promote toxic behaviour
  • be rewarding and interesting for casual mapper
    • Xth in country ABC is quite hard to advance for top scores, top mappers made so many edits that it would take years to overtake them
    • it should be possible to reach 1st position is something within months, without rearraging life around StreetComplete
  • encourage regular use of StreetComplete

My idea is to have both counter how many of last N days user was editing and display something like "15% of last 100 days were mappy days" or "you made edit in 15 of last 100 days"

This would be a nice addition to overall "days with mapping" counter.

Additionally I would add ranking based on that "you are 456 worldwide based on active days within last 100 days"

This provides renewable, resetting ranging that gives equal opportunity to extreme powermapper and someone who would map once a day while walking a dog.

Just 1 edit a day would be enough to be ranked first worldwide for "X active days within last N days", together with other regularly active people. And reward primarily a regular mapping, which is habit-building and would encourage long-term activity.

In addition it would be nice to show recent daily streak like shown by GitHub and HDYC. Which is showing nicely also on mobile.

Mobile screeenshot below - shows that this kind of interface can fit well.

Screenshot_2022-01-03-03-38-29-958_com android chrome

Main expected negative is that people would "solve" random quest with junk answer to keep streak, but it would require person caring about not really important ranking in OpenStreetMap editing app and not caring at all about OSM data quality which should be fairly rare. I hope.

I consider typical habit building by various software products as unethical. And in many cases clearly evil in cases like gambling, pay-to-win games, pay-to-avoid-playing "games". And ones putting social pressure to pay real money in game for various status markers. But in this case I think that overall effects to the app user are truly beneficial and therefore deliberate habit building is acceptable (walking in neighborhood, going outside are expected primary effects). Also it will not be of negative/aggressive variety ("offer expires in 10 minutes!" / "rand() other people are looking at this room right now!" / "pay for a chance to win!").

Though I am clearly biased here as I indirectly benefit from more people using SC or mapping in OSM in general.

What UI exactly would best achieve this goal? So, you would like something like the statistics on GitHub, or something similar to it? A statistic like that certainly doesn't fit on a smartphone screen

Idea for now:

  • bubble showing number with label "mappy days within last 30 days" or "days with edits over last 20 days" or similar
  • bubble showing position with label "worldwide ranking, by days with edits within last 20 days" or similar

Idea for future:

  • in addition show this box-for-each-day graph

@westnordost
Copy link
Member

Wow, thank you for the write-up! I agree with everything you wrote and the idea of having an easy way to achieve a rank at the top is really a nice addition!

I have been concerned a bit about if the user sees that he has been mapping for so many days in the last X months, it may actually be off-putting - i.e. that he thinks that maybe he puts too much time into that hobby. But you are right, this is not a bad thing. Our goal is not to press as many contributions as possible out of users, but our goal is that people are happy with contributing to OSM and consider it as a worthwhile hobby.

The box-for-each-day graph would probably be a (scrollable) recycler view. Even if you don't plan this box from the start, I think it is best to design the JSON response in a way that either already includes this information or is compatible to when it does.

@matkoniecz
Copy link
Member Author

After thinking a bit I think that

{
"2021-12-29": false,
"2021-12-30": false,
"2021-12-31": true,
"2022-01-01": true,
"2022-01-02": true
}

is the best one.

Or date list, but that would require also passing info about range (otherwise sending "active just yesterday" would not really help as SC would have no idea whether 7 last days or 50 last days were analyzed)

recentDaysActive: [
"2021-12-31",
"2022-01-01",
"2022-01-02",
recentDaysActiveRange: 30
]

has been mapping for so many days in the last X months, it may actually be off-putting

And we have already "days active". That in may case causes me to feel old sometimes - as it reminds me how much time elapsed since I become active in SC project.

@westnordost
Copy link
Member

Sounds reasonable

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants