The Case for a Smaller Spotify

In 2017, Spotify's growth teams noticed something unexpected in registration data from several fast-growing markets. A significant share of new signups were coming from Android devices far older and more limited than those typical in North America and Europe. Storage constraints meant many potential users simply couldn't install the main Spotify app, and those who could weren't getting a great experience.

The engineering challenge was clear: make Spotify work on devices with limited storage, memory, and low-resolution screens, over unreliable networks. Spotify Lite was born as an experiment that had to prove itself both technically and in terms of product-market fit.

A Single Team, a Separate App

Unlike the main Spotify Android client, which is split across many feature teams, Spotify Lite was built by one autonomous, cross-functional team owning the entire design, development, and release process. Before writing code, the team traveled to target markets to experience the network and device constraints firsthand.

Rather than modularizing the existing, tightly coupled codebase, the team chose to build a new, separate app from scratch. This allowed rapid iteration and free experimentation. Spotify Lite launched with a completely different playback stack than the main app, minimizing memory footprint and network data usage. That initial stack was later replaced with a tailored setup focused on stability and playback quality under poor network conditions.

The team also leaned on existing Spotify tooling for recommendations, search, playback, and instrumentation, which let them concentrate on solving the unique constraints of the Lite use case.

Deciding What to Keep and What to Cut

Shrinking Spotify into Lite raised two questions: what defines the "Spotify experience," and what can be sacrificed to stay light?

The answer to the first was to keep the brand's look and feel consistent with the main Android app. Design choices had to adapt to smaller screens and lower resolutions, including checking that information remained readable on scratched or broken displays common on older devices. These design heuristics have since been added to Spotify's broader design strategy.

Under the hood, the team applied every known binary size reduction technique. The native shared library for playback saw experiments with compiler and linker flags, including switching to the lld linker, enabling link time code optimizations, and disabling language features like RTTI. On the Android side, they used App Bundles for publishing, optimized R8 shrinking, carefully chose dependency libraries, and stripped unused translations.

Install size also received attention. The shared library is stored unpacked in the APK without copying it to the install folder, and users can store the app, its cache, and downloads separately on an SD card.

The early size gains were large, but each subsequent reduction became harder. The team added checks to their continuous delivery pipelines to prevent size bloat as new features were requested.

Beyond the App Itself

Spotify Lite's existence forced changes beyond the new app's boundaries. Backend services had long assumed there was only one Spotify app per platform; feature flags and application views were built around that assumption. Adding Lite meant developers needed to know exactly which app a user was using.

The team generalized this problem, building a way to identify all apps in the Spotify ecosystem. That groundwork paid off when other apps like Spotify Kids, Spotify Stations, and Android Automotive were introduced.

Spotify's playback library was also redesigned with Lite's constraints in mind, accounting for download and installation sizes, memory usage, and a reduced feature set. Similar considerations were applied to music and image transcoding services.

Ongoing Investment

With positive adoption numbers since launch, efforts have shifted toward performance, quality, and resilience. A recent overhaul of the client architecture aims to serve the growing user base and reduce playback latencies.

Working on Lite produced infrastructure benefits for other Spotify apps, including a backend service that scales down images to reduce network traffic and support for App Bundles, which lets users download only the assets their device needs. This was also the first separate app Spotify's build system handled, laying the groundwork for building native dependencies, sharing code components, and setting up crash and ANR reporting across apps.

The team continues to lower the barrier to Spotify access, with a backlog of performance ideas intended to benefit not just Lite but the entire ecosystem.