How We Release the Spotify App: A Look Under the Hood (Part 2)

Jacob Vesterlund and Katie Walker
9 min readintermediate
--
View Original

Overview

This article details the tooling behind Spotify's mobile app release process, focusing on the Release Manager Dashboard built as a Backstage plugin. It covers the evolution from Jira-based release management to a unified dashboard that aggregates data from ~10 backend systems, and introduces an automated 'Robot' that reduced the average release cycle by approximately eight hours by automatically advancing releases through their state machine.

What You'll Learn

1

How to design a release management dashboard that minimizes context switching and cognitive load for release managers

2

How to optimize a backend API gateway with caching and pre-aggregation to reduce load times from slow to 8 seconds

3

How to model a release process as a state machine with automated condition-checking to advance releases through stages

4

Why building release tooling as a Backstage plugin provides ecosystem advantages over off-the-shelf alternatives

5

How time-series data from release monitoring can reveal process bottlenecks and justify automation investments

Prerequisites & Requirements

  • Basic understanding of mobile app release processes (branching, release candidates, app store submissions)
  • Familiarity with Part 1 of this series covering the Spotify release process overview
  • Understanding of Backstage developer portal concepts and plugin architecture(optional)
  • Familiarity with React and TypeScript for understanding the dashboard implementation(optional)

Key Questions Answered

How does Spotify manage releases across Android, iOS, and Desktop platforms?
Spotify releases each platform independently using a concept called 'tracks' (combination of platform and version). Each track goes through five states: release branched, final release candidate, submitted for review, roll out 1%, and roll out 100%. The Release Manager Dashboard provides a unified view of all tracks, showing release state, blocking bugs, sign-off status, build readiness, and quality metrics like crash rates and ANRs.
What is the Spotify Release Manager Dashboard and how was it built?
The Release Manager Dashboard is a Backstage plugin written in React and TypeScript that serves as a command center for release managers. It replaced a Jira-based workflow that required excessive context switching. The dashboard pulls data from around 10 existing backend systems through an API gateway, displaying release status with color-coded indicators (green for complete, yellow for warning, red for error) across Production, Current, and Upcoming releases.
How did Spotify optimize the Release Manager Dashboard backend performance?
The initial version was slow and costly because every reload triggered massive data queries. Spotify optimized by implementing caching and pre-aggregating data every five minutes instead of querying on demand. This reduced the load time to just eight seconds and dramatically cut costs, making the dashboard fast, reliable, and inexpensive to operate.
What is the Spotify release automation Robot and how much time does it save?
The Robot is a backend service that automatically checks conditions and triggers the next release action when conditions are met, replacing manual release advancement. It models the release process as a state machine with five main states plus error and waiting states. Before automation, manual advancement could cause delays of up to 12 hours if a step completed outside work hours. The Robot reduced the average release cycle by approximately eight hours.
What are the biggest bottlenecks in Spotify's mobile release cycle?
Analysis of time-series data from the Release Manager Dashboard revealed two major time sinks: testing and fixing blocking bugs, and waiting for App Store approval (which is largely outside Spotify's control). Additionally, manually advancing releases between stages could cause delays of up to 12 hours when steps completed outside working hours, which prompted the development of the automated Robot.
Why does Spotify maintain a custom release dashboard instead of using off-the-shelf alternatives?
After five years, Spotify continues to maintain their custom dashboard for several reasons: easy reuse and linking of Release Manager components across Backstage views, the Backstage Software Catalog providing the underlying data model that other teams can query, access to Spotify's org data through the Band Manager plugin for automatic bug assignment, and low friction since all Spotify developers already use Backstage.
What quality metrics does Spotify track before releasing a mobile app version?
Spotify tracks several quality metrics before release: crash rates, ANRs (App Not Responding), CPU exceptions per song, and daily active users for the build being released. These metrics are monitored alongside release-blocking bugs, regression testing sign-off status, build verification test results, and successful App Store upload. ITGC (IT General Controls) tests must also pass to verify correct reporting and confirm data loss is below defined thresholds.

Key Statistics & Figures

Backend systems integrated
~10
Number of existing systems the backend service pulls and unifies data from
Dashboard load time after optimization
8 seconds
After implementing caching and pre-aggregating data every five minutes
Data refresh interval
5 minutes
How often the backend pre-aggregates release data
Release cycle reduction from automation
~8 hours
Average reduction in release cycle after implementing the automated Robot
Maximum delay from manual advancement
Up to 12 hours
Delay when a release step completed outside working hours before automation
Release states before rollout
5 main states
plus 2 error/waiting states
Dashboard age
5 years
How long the Release Manager Dashboard has been in use at time of writing
Platforms supported
3
Android, iOS, Desktop

Technologies & Tools

Some links below are affiliate links. We may earn a commission if you make a purchase.

Developer Portal
Backstage
Internal developer portal platform that hosts the Release Manager Dashboard as a plugin
Frontend
React
UI framework used to build the Release Manager Dashboard Backstage plugin
Language
Typescript
Programming language used alongside React for the dashboard plugin
Project Management
Jira
Previous release management tool that was replaced by the custom dashboard
Communication
Slack
Used for release status pings and team communication during releases
Infrastructure
Backstage Software Catalog
Provides the underlying data model for the Release Manager Dashboard and build distribution configuration
Experimentation
Confidence
Spotify's internal experimentation platform that consumes release data to understand client version impact on experiments

Key Actionable Insights

1
Consolidate release management information into a single dashboard view rather than spreading it across multiple tools like Jira. The goal should be to minimize context switching and cognitive load by showing all relevant data—release state, blocking bugs, sign-off status, build readiness, and quality metrics—on one page with drill-down capability.
Spotify found that managing releases across multiple Jira tabs led to missed details and extra work. Their single-page dashboard approach with color-coded status indicators enabled fast and accurate decision-making.
2
Implement caching and pre-aggregation for dashboard backends that pull from multiple data sources. Instead of querying all upstream systems on every page load, aggregate data at regular intervals (e.g., every five minutes) and serve cached results. This approach can dramatically reduce load times and operational costs.
Spotify's initial implementation triggered massive queries on every reload, making it slow and expensive. After adding caching and pre-aggregation, load time dropped to eight seconds and costs became negligible.
3
Model your release process as a finite state machine with explicit conditions for state transitions, then automate those transitions with a backend service. This eliminates delays caused by manual handoffs, especially when steps complete outside working hours, and ensures releases progress as soon as all conditions are met.
Spotify's automated Robot checks conditions and triggers next actions automatically. Before automation, manual advancement could cause up to 12 hours of delay. After implementation, the average release cycle was reduced by about eight hours.
4
Use time-series data from your release process to identify bottlenecks and justify automation investments. By saving release data at regular intervals, you create a historical dataset that reveals where time is actually being spent versus where you assume it's being spent.
Spotify's five-minute data collection intervals allowed them to discover that testing/bug-fixing and App Store approval were the biggest time sinks, and that manual state advancement was causing significant unnecessary delays.
5
Build internal developer tools as plugins within your existing developer portal ecosystem rather than standalone applications. This approach provides reusability of components, access to organizational data, and reduces adoption friction since developers are already using the platform.
Spotify built their Release Manager Dashboard as a Backstage plugin, gaining access to the Software Catalog data model, org data through Band Manager, and shared UI components. Other teams can query and surface release data for their own needs, such as understanding experiment impact.
6
Design release dashboards with a clear visual hierarchy using color-coded indicators (green/yellow/red) that distinguish between states requiring no action, states requiring attention, and states requiring immediate action. This traffic-light pattern enables at-a-glance understanding of release health across multiple platforms.
Spotify uses green for complete/ready, yellow for warning/waiting states, and red for errors needing rectification. This allows the Release Manager to quickly identify which of the three platforms (Android, iOS, Desktop) needs attention.

Common Pitfalls

1
Building release dashboards that query all upstream data sources on every page load. Spotify's initial backend triggered massive data queries on each reload, resulting in long load times and high operational costs. This pattern doesn't scale when aggregating data from multiple systems.
The fix was to implement caching and pre-aggregate data at regular intervals (every five minutes), reducing load time to eight seconds and costs dramatically.
2
Relying on manual advancement of release stages, which introduces significant idle time when steps complete outside working hours. Spotify found that manual release advancement could cause delays of up to 12 hours, as no one would be available to push the release to the next step.
Automating state transitions with a backend service that continuously checks conditions eliminates these gaps. The investment paid for itself within months.
3
Spreading release management information across multiple tools and requiring context switching between different views and tickets. Using Jira for everything forced Spotify's Release Managers to juggle tabs, jump between tickets, and manually check statuses, making it easy to miss critical details.
Consolidating all release-relevant data onto a single page with drill-down capability reduces cognitive load and enables faster decision-making.
4
Not tracking release process data over time, which prevents identifying bottlenecks and measuring improvement. Without time-series data, teams rely on anecdotal evidence about where time is spent in the release cycle, often optimizing the wrong areas.
Spotify's five-minute data snapshots created a time-series dataset that revealed testing/bug-fixing and App Store approval as the actual biggest time sinks, enabling targeted improvements.

Related Concepts

Release Management
State Machines
Backstage Developer Portal
API Gateway Pattern
Data Pre-aggregation And Caching
Mobile App Release Lifecycle
Release Candidate Builds
Regression Testing
Crash Rate Monitoring
Anr (app Not Responding) Tracking
Continuous Delivery
Release Automation
Itgc (it General Controls)
Software Catalog
Developer Experience Tooling
Build Verification Testing