spotify

How We Release the Spotify App: A Look Under the Hood (Part 2) | Spotify Engineering (opens in new tab)

Spotify’s Release Manager Dashboard replaced a Jira-heavy workflow with a unified command center for mobile and desktop releases. It reduces context switching and cognitive load by aggregating release status, bugs, testing, build health, and usage metrics into one interface. A backend that caches and pre-aggregates data from roughly ten systems makes the dashboard fast and affordable.

From Jira to a Release Command Center

  • Previously, Release Managers depended on Jira tickets, multiple browser tabs, and Slack conversations.
  • This made it easy to miss details and required constant context switching.
  • The dashboard was designed to:
    • Prioritize the Release Manager’s workflow.
    • Remain understandable to anyone familiar with Spotify’s release process.
    • Reduce cognitive load.
    • Support fast, accurate decisions.

Release Data

Spotify treats each platform-and-version combination as a track. Android, iOS, and Desktop share some libraries but are released independently.

  • Track-specific information includes:
    • Current release state.
    • Release-blocking bugs.
    • Team regression-testing sign-offs.
    • Final release candidate build status.
    • Build verification test results.
    • App Store upload status.
    • Crash, ANR, and CPU-exception rates per song.
    • Daily active users.
  • The dashboard also highlights:
    • Blocking bugs without an assigned version.
    • Bugs without a priority.
    • Reports from internal users and alpha/beta testers.
  • Release management includes finding appropriate owners for unassigned issues, even when temporary team ownership is needed.

React, TypeScript, and Backstage

  • The dashboard is a Backstage plugin built with React and TypeScript.
  • Spotify’s Backstage ecosystem already provides:
    • Software Catalog functionality for distributing builds to app stores.
    • App-build and crash plugins with deeper detail.
    • Shared UI components and data across developer tools.
  • The interface provides a quick health overview, with drill-down capabilities for investigating blockers.
  • Status colors communicate urgency:
    • Green: Ready for the next stage.
    • Yellow: Something still needs attention.
    • Red: An error requires corrective action.

Backend Aggregation and Performance

  • A dedicated backend acts as an API gateway for approximately ten existing systems.
  • It consolidates their data into one consistent API for the dashboard.
  • The initial implementation queried large amounts of data on every reload, making it slow and expensive.
  • Caching and five-minute pre-aggregation reduced load time to about eight seconds while significantly lowering operating costs.

Dashboard Sections

Production

  • Shows the currently deployed Android, iOS, and Desktop versions.
  • Since these releases have completed the release process, only production metrics are displayed.
  • Metrics include:
    • Crash data.
    • Rolling daily active users over the previous 24 hours.
  • This helps Release Managers detect problems shortly after rollout.

Current

  • Displays the branched version that has not yet reached production.
  • Tracks release blockers such as:
    • Open blocking bugs.
    • Incomplete regression testing.
    • Crash rates above release thresholds.
    • Builds that do not contain the latest release-branch commits.
  • Yellow indicators represent pending work, while red indicators call for direct investigation or action.
  • The ITGC section confirms that full production rollout is permitted only after:
    • ITGC tests pass.
    • Reporting is correct.
    • Data loss remains below the defined threshold.
  • A Release Status Ping link generates a Slack update with the release’s current state.

Upcoming

  • Mirrors the Current release view for the next planned version.
  • Sections that are not yet relevant are shown in a grayed-out state.

The dashboard illustrates how a specialized aggregation layer and focused UI can turn a fragmented release process into a clear operational workflow. For organizations managing complex, multi-platform releases, combining cached cross-system data with color-coded status and drill-down details can improve both speed and release safety.