Skip to content

Product question

Where should Spotify invest next quarter?

Access, usability, playback, or billing and support — ranked from saved review labels, with every number traced to its evidence.

Independent course project · not affiliated with Spotify

Memo summary

Method, in hindsight

Labels

We label from the review text only. A star rating says little about which feature failed or how badly, so it stays metadata. The frozen 110,000-review selection contains 83,003 distinct nonempty texts. Exact-text caching preserves a separate result and provenance for each accepted source ID.

Ranking

We chose a rule anyone can recompute over a cleverer score. Only complaints and cancellations count, and an issue's priority is the sum of its severities. The dashboard recomputes the ranking before it shows it.

Limits

These are self-selected public app reviews, not all customers. There is no revenue, plan or churn data. A cancellation review states intent; it does not prove that a person left.

What we would do differently

  • Save every failed response

    One extractor response failed validation, and we could not say why: only the error class was saved. The runner now keeps the response and the validator's message.

  • Measure time in one process

    The v2 run recorded a negative wall time because start and end came from different processes. Summed request time is not stage time.

  • Keep the option probabilities

    Jev can return a likelihood for each option. We saved only confidence, so we cannot check calibration after the fact.