Quinn app — mobile screens for categories, discover, and favorites

Quinn App — Playlist Functionality QA

January 2025 · Paid take-home · iOS & web (Chrome & Safari)

Overview

Quinn’s CEO reached out with a paid take-home QA assignment on Quinn, an audio storytelling platform. The scope was playlist functionality — creating playlists, adding and reordering stories, privacy settings, favorites, title/description boundaries, and behavior under different network speeds and offline mode. The work was also part of their hiring process.

I tested the same flows on iOS (physical device and simulator) and the web app in Chrome and Safari, then documented bugs with Loom recordings, screenshots, and a structured PDF report. I wasn’t offered the role, but it was valuable experience on a live product with real hiring stakes.

Scope & tools

  • Manual exploratory testing
  • Boundary testing (titles, descriptions)
  • Cross-platform (iOS + web)
  • Network throttling
  • Offline behavior
  • Chrome DevTools
  • Safari Web Inspector
  • Postman (API validation)
  • Loom

Features exercised

Create playlists · add single/multiple stories (100+ stress-tested) · reorder & remove · public/private · favoriting · edit title & description · library counts · duration accuracy · offline sync.

Findings by platform

Web (Chrome & Safari)

  • Core playlist flows worked; large playlists (100+ stories) performed well.
  • Library overview story count stale until page reload.
  • Account likes count stuck at zero when favoriting stories or playlists.
  • Playlist descriptions not shown on web (visible on iOS).
  • Whitespace-only titles accepted → nameless, unsearchable playlists.
  • Total playlist duration consistently +1 second vs sum of stories.
  • Offline adds showed in UI but did not sync after reconnect.

iOS app (v2.4.1)

  • Creation, reorder, privacy toggles, and favoriting worked smoothly.
  • Recent Activity list showed wrong story count until app restart.
  • Whitespace-only titles accepted (same as web).
  • Offline UI masked controls in gray — clearer than web.
  • Descriptions displayed correctly on iOS.
  • Playlist durations accurate (no +1s issue on iOS).
  • Strong UX: add-to-playlist from three-dot menu anywhere in the app.

Network performance

Search and add-story timing under throttled conditions (Chrome DevTools):

<500ms Search · fast (~321 Mbps)
~10s Search · slow 3G
<500ms Add story · fast
~2s Add story · slow 3G

API exploration with Postman

Captured playlist requests from the Chrome Network tab and replayed them in Postman to validate story additions and correlate UI actions with story IDs.

Postman request used to manipulate playlist data
Postman request
Chrome DevTools network panel showing playlist API traffic
DevTools network capture

Workflow: filter DevTools for playlist traffic, copy a successful add story request, paste into Postman with the same auth headers, swap in a different story ID from the response body, and send. The playlist updated in the web UI without repeating the click path — confirming the API accepted the change independently of the front-end flow. Full request/response notes are in the bug report PDF.

Documented issues

Ten issues logged with severity, steps, expected vs actual, environment, and video or image evidence. Full write-up in the PDF.

  • Issue 1 Minor

    Library overview playlist story count does not update until page reload after add/remove.

    Loom recording
  • Issue 2 Minor

    After favoriting another user’s playlist, My Account playlist count is one less than Library.

    Loom recording
  • Issue 3 Minor

    Account Overview likes count stays at zero when favoriting individual stories or full playlists.

    Loom recording
  • Issue 4 Major

    Playlist descriptions save but do not display on web for owner or shared public link (iOS shows them).

    Loom recording
  • Issue 5 Major

    Title field accepts spaces only → nameless playlist, hard to find in Library or search.

    Loom recording
  • Issue 6 Enhancement

    Web: users must open a playlist to add stories — suggest add-to-playlist from browse/profile flows (iOS already supports this).

    Loom recording
  • Issue 7 Minor

    Playlist header total duration is always one second longer than the sum of story durations (even for a single story).

  • Issue 8 Enhancement

    Offline story add updates UI with no network warning; change is lost after reconnect and refresh.

    Loom recording
  • Issue 9 Minor iOS

    Recent Activity shows stale story count after add; correct after force-close and reopen.

    Steps: Open a playlist from Recent Activity, add one or more stories, return to Recent Activity. Expected: Row shows updated story count. Actual: Count stays at the pre-add value until the app is force-closed and reopened. Env: iOS 18, Quinn v2.4.1 (physical device). Documented with screenshots in the PDF — iOS screen recording was not hosted publicly.

  • Issue 10 Enhancement iOS

    Suggest remove-story option on the three-dot menu next to each story, not only via Edit Playlist.

    iOS already surfaces add to playlist from the three-dot menu on story cards across the app — a strong pattern. Removing a story still requires entering Edit Playlist and using the trash icon per row. Suggestion: mirror the add flow with Remove from playlist on the same menu to cut steps for curation. Compared against web, where add also requires opening the playlist first (Issue 6).

Open full bug report PDF

Evidence

Playlist header showing total duration one second longer than the sum of individual story durations
Issue 7 — playlist duration off by one second (web)

Web recordings (Loom)

Takeaway

Core playlist features were solid on both platforms, with clear gaps in count sync, validation (whitespace titles), web description display, offline handling, and a persistent duration rounding bug on web. iOS led on discoverability (add from anywhere) and offline affordances. The assignment mirrored production QA under hiring pressure: exploratory sessions, cross-platform comparison, API corroboration, and evidence-backed reporting a team could act on.