How it works

Full method

For anyone who wants to check the arithmetic.

How the score is computed

Try it

Notion's real numbers. Move one and everything recomputes, using the pipeline's own functions rather than a copy.

7

6

2

1.4

0

6

0

The last one changes the verdict, not the score: three or more and the problem is Already solved whatever it scores.

73

Strong signal

threshold 70.0

  1. Distinct users14.6 of 25
  2. Recurrence15.0 of 20
  3. Recency15.0 of 15
  4. Severity13.4 of 15
  5. Churn intent0.0 of 10
  6. Version persistence10.0 of 10
  7. Cross-platform5.0 of 5
score = 100 × (
    0.25 × distinctUsers
  + 0.20 × recurrence
  + 0.15 × recency
  + 0.15 × severity
  + 0.10 × churnIntent
  + 0.10 × versionPersistence
  + 0.05 × crossPlatform
)

25%

Distinct users

How many different people reported it, counted by a salted hash of the reviewer name.

20%

Recurrence

How many separate weeks it appeared in, rather than all at once.

15%

Recency

How long ago it was last reported.

15%

Severity

The mean star rating of the reviews reporting it.

10%

Churn intent

How many reviewers said they were leaving, deleting or cancelling.

10%

Version persistence

How many distinct app versions it survived.

5%

Cross-platform

Whether it was reported on both iOS and Android.

Each component's weight, and what it counts. They total 100%.

The verdict

  1. Fewer than four distinct reviewers

    Thin evidence10 challenges

  2. Three or more existing products already solve it

    Already solved0 challenges

  3. Scores at or above the threshold of 70.0

    Strong signal2 challenges

  4. Everything else

    Recurring13challenges

Of 25 active problems: 10 are Thin evidence, because fewer than four distinct reviewers; 0 are Already solved, because three or more existing products already solve it; 2 are Strong signal, because scores at or above the threshold of 70.0; the remaining 13 are Recurring.

Where the 25 active challenges currently sit, tested in this order.

25 active challenges scored between 40 and 75. 2 sit at or above the threshold of 70.0. 40 to 45: 3; 45 to 50: 2; 50 to 55: 4; 55 to 60: 10; 60 to 65: 3; 65 to 70: 1; 70 to 75: 2.

Every active problem's score, in buckets of five. The threshold is the higher of 70 and the 80th percentile, so it moves with the field. It stands at 70.0, and 2 of 25 clear it — a pass rate of 8%. A low one is the point.

One challenge, underneath

People lose their place, and their work, when the editor freezes in Notion

Score

73

Strong signal

more evidence than most problems have — 70 or more out of 100

How this score is calculated

Seven components, each scored from 0 to 1 and multiplied by its weight. The model that reads the reviews never produces a number; every figure below is computed in code.

  1. Distinct usersweight 25%

    7 distinct reviewers, of 12 needed for full marks

    0.58 × 25 = 14.6 of 25 points

  2. Recurrenceweight 20%

    6 separate weeks carrying evidence, of 8 needed for full marks

    0.75 × 20 = 15.0 of 20 points

  3. Recencyweight 15%

    last reported 2 days ago; full marks inside 14 days, zero at 180

    1.00 × 15 = 15.0 of 15 points

  4. Severityweight 15%

    mean rating 1.4 of 5 across 7 quotes

    0.89 × 15 = 13.4 of 15 points

  5. Churn intentweight 10%

    0 reviewers said they were leaving, of 4 needed for full marks

    0.00 × 10 = 0.0 of 10 points

  6. Version persistenceweight 10%

    6 distinct app versions in the last 180 days, of 4 needed for full marks

    1.00 × 10 = 10.0 of 10 points

  7. Cross-platformweight 5%

    reported on both iOS and Android

    1.00 × 5 = 5.0 of 5 points

Total 73.0, rounded to 73

Evidence over twelve weeks
4 of 7 reviews arrived in the last twelve weeks.
Which releases it survived
6 app versions carried this challenge, spanning 175 days: 1.7.289 on iOS, first reported 26 Mar 2026, 1 review; 1.7.301 on iOS, first reported 26 Apr 2026, 1 review; 1.7.308 on iOS, first reported 23 May 2026, 1 review; 1.7.328 on iOS, first reported 18 Aug 2026, 2 reviews; 0.6.4100 on Android, first reported 29 Aug 2026, 1 review; 1.7.338 on iOS, first reported 17 Sept 2026, 1 review.
Which store it came from
  • iOS686%
  • Android114%
6 of 7 reviews from iOS, 1 of 7 reviews from Android.
What each review signalled
  • 0of 7said they were leaving
  • 1of 7worked before an update
  • 3of 7described a workaround
  • 0of 7about billing
  • 0of 7named a competitor
Of 7 reviews: 1 worked before an update, 3 described a workaround.

Every challenge carries all of this. On the challenge itself it is one sentence — 7 people raised this — because a person can read that and cannot read seven bars.

Twelve weeks, every challenge at once

Twelve weeks of complaints, by challenge

Darker cells are challenges more people reported that week.

Taller ridges are challenges more people reported that week. Hover one to see which.

Reviews per week for 25 challenges over the last 12 weeks.
Challenge
The mobile app freezes and lags while editing pages000002100100
Refunds are refused, delayed, or issued as credit that cannot be used100000012200
Purchased tickets cannot be reached when the app fails to load or sign in000000025300
The mobile app stutters and crashes in chats and calls000000000100
The app freezes or fails to load, and recording can stop mid-activity010100010000
Lessons hang, crash, or fail to load their audio000000101200
Refunds are refused after problems with a stay100000022000
The app errors out and the support chat is unusable000000012100
The free tier will not let you choose which song plays000000000500
There is no way to reach a person about a problem with a ride000000010300
Payments and transfers fail, leaving money unreachable000000000600
The app returns generic errors and basic actions silently fail000000002100
Hosts cannot reach the calendar or messages after the redesign000000011000
Ads and AI prompts interrupt lessons and cannot be dismissed000000110100
Playback pauses, restarts or cuts out on its own000000001300
Free trials convert to a paid year immediately and refunds are refused010000000100
Free trials become a paid year without warning and refunds are refused000000110100
Adverts interrupt every second song and cover the player000000000400
Tickets are only available in the app and the barcode often will not display000000013100
The energy system stops free lessons after a few minutes000000001100
The app crashes, signs you out, and will not reopen without reinstalling000020000100
Added AI features slow the app and cannot be turned off000000111000
Sign-in fails and a stale account cannot be removed from the app000000000300
The amount charged does not match the fare that was quoted000000021000
Meetings cannot be joined from the mobile app000000000300
Reviews in a week01–234–56

Every scan so far

    1. Read9,994100%
    2. Screened3,31933%
    3. Complaints95610%
    4. Carried1502%
    Problems tracked
    25
    New this scan
    17
    Play coverage
    15 of 15
    1. Adobe LightroomApple: returned dataPlay: returned data
    2. AirbnbApple: returned dataPlay: returned data
    3. CanvaApple: returned dataPlay: returned data
    4. DuolingoApple: returned dataPlay: returned data
    5. ExpediaApple: returned dataPlay: returned data
    6. Microsoft TeamsApple: returned dataPlay: returned data
    7. NotionApple: no dataPlay: returned data
    8. RobinhoodApple: returned dataPlay: returned data
    9. SlackApple: no dataPlay: returned data
    10. SpotifyApple: returned dataPlay: returned data
    11. StravaApple: returned dataPlay: returned data
    12. TicketmasterApple: returned dataPlay: returned data
    13. UberApple: returned dataPlay: returned data
    14. VenmoApple: returned dataPlay: returned data
    15. ZoomApple: returned dataPlay: returned data

    Apple 13 of 15, Play 15 of 15. A missing cell is a gap the run recorded and carried on past.

    Of 15 apps, Apple returned data for 13 and Google Play for 15. Notion: no Apple data; Slack: no Apple data

Where the data comes from

Two sources, both public, neither requiring credentials or an agreement.

Apple App Store

Apple publishes a customer reviews feed for each app in each storefront. Friction reads up to ten pages per app per storefront, at one request per second, from the United States, the United Kingdom, Canada, Australia, New Zealand, Ireland and Singapore. Each review carries a star rating, an app version, a country and a date. This is the backbone of the project.

Google Play

Google publishes no API for reading reviews of apps you do not own. Friction reads publicly visible review pages using the google-play-scraper package, at one request per second, taking the most recent English reviews from the United States storefront. Play reviews carry no title, and often no app version.

Play is an enhancement, not a dependency. If it fails for an app, the run continues with Apple data alone and the gap is recorded. In the most recent scan every tracked app returned Play data.

How reviews become challenges

Most of the filtering is deterministic and happens before any model sees anything. A review is rejected outright if it has already been processed, if it is older than 180 days, if the title and body together run under 80 characters, or if it matches the crisis language screen below. What survives is kept only when it is rated three stars or lower and contains at least one of a fixed list of complaint markers. The survivors are ranked by marker count, then star rating, then recency, and capped at 150 per run.

Those go to a language model with one job: group reviews that describe the same underlying problem, and copy a short verbatim quote from each. The model is explicitly forbidden from producing a score, a rank or a priority of any kind. Its output is then parsed against a strict schema and every quote is checked, character by character, against the review it claims to come from. If any check fails the run stops and nothing is published, leaving the previous week's data in place.

How the score is computed

Seven components, each normalised to a value between 0 and 1 over evidence from the last 180 days, multiplied by the weights below, and scaled to 0–100.

Open "How this score is calculated" on any problem page to see these seven values for that problem, with the raw counts behind each one and the arithmetic that produces the total.

The verdict, and why most challenges fail

The verdict is decided in a fixed order. Fewer than four distinct reviewers isThin evidence, whatever the score. Three or more existing products that already solve it is Already solved. Otherwise a score at or above the build threshold is Strong signal, and anything else is Recurring.

The threshold is the higher of 70 and the 80th percentile of all active problem scores, computed by linear interpolation between the closest ranks. It currently stands at 70.0. Of 25 active challenges, 2 carry the "Strong signal" verdict, a pass rate of 8%.

That low pass rate is deliberate. A site where everything looks promising is worth nothing to anyone deciding what to work on, so the bar moves with the field and never drops below 70. A problem with no new evidence for 120 days is marked stale; it stays readable but is left out of the homepage and out of the threshold calculation.

What this method cannot tell you

Reviews have no permanent link

Neither store gives an individual review a stable public URL. This is the single biggest limitation of the whole project and it cannot be engineered away. Evidence therefore links to the app's review listing, not to the review itself, and every quote is labelled with the date the scan captured it. You cannot click through and re-read the original. What you can do is read the commit history in the repository, where every scan's output is recorded with a timestamp.

Coverage is narrow

English-language reviews, 7 Apple storefronts, one Play storefront, mobile apps only, and only the 15 apps currently tracked. A quiet app produces a small sample, and a small sample produces an unreliable score. Treat a scored problem as a starting point for your own research, not as a conclusion.

Privacy

  • No reviewer name is ever stored. Names are hashed with a secret salt the moment they are read, truncated to sixteen characters, and discarded. The hash exists only to count distinct people and is never displayed.
  • Quotes are capped at 25 words and must be verbatim. A quote that is not a character-for-character substring of the review it cites fails validation and stops the run.
  • Raw review text is deleted after 30 days. Full review bodies exist only in the intermediate files for a single scan; the published records keep the capped quote and nothing more.

What is never tracked

Apps whose subject matter is personal distress or health are never tracked. The check runs before any request is made, against the app name, the developer name and the store category, and the tracked list is not exempt from it. An app matching any of these terms is excluded:

  • mental health
  • therapy
  • counsel
  • mood
  • depress
  • anxiety
  • suicide
  • crisis
  • addiction
  • recovery
  • sober
  • quit smoking
  • rehab
  • calorie
  • diet
  • weight loss
  • fasting
  • eating
  • macro
  • bmi
  • period
  • fertility
  • pregnan
  • medical
  • symptom
  • diagnos
  • telehealth
  • pharmacy
  • dating
  • hookup

Separately, any individual review whose text matches crisis language is dropped before it enters the pipeline. Such a review is never stored, never quoted and never counted towards any score. The list of terms lives in the source rather than on this page.

Both screens match inflected forms as well as the exact words. They are deliberately broad. Excluding something that belonged is a cost worth paying here.

Non-commercial

Friction has no ads, no payments, no signup, no paywall and no affiliate links, and it is not affiliated with any of the apps it tracks. It reads publicly visible reviews and publishes the analysis with the method attached. If you think something here is wrong, the data and the code are both in the repository and you can check it yourself.

Esc

43 results