Evidence ledger
One row per claim in Deciding what to stop building: ten years of Spotify, read from its own archive notices: who published it, what grade it carries, when it was written, when the link was last checked, and the quote or figure it rests on. Nothing in the guide is cited from memory, so anything not in this table is not in the guide.
Field guide: Deciding what to stop building: ten years of Spotify, read from its own archive notices Category: platform-and-infrastructure · Research date: 2026-09-14 · All links fetched 2026-09-14.
Corpus limit, stated up front. This session's network egress policy reached github.com,
raw.githubusercontent.com, repo1.maven.org, pypi.org, registry.npmjs.org, crates.io,
hub.docker.com and cloud.google.com. It did not reach engineering.atspotify.com,
backstage.io, spotify.github.io, www.usenix.org, arxiv.org or any video host. Every claim
below therefore comes from a repository, a package registry, an advisory, or the two
Spotify-sourced posts that Google published on its own blog. There are no conference talks and no
peer-reviewed papers in this corpus, and that absence is reported in the guide rather than papered
over.
| # | Org | Title | Tier | Published | Checked | URL | Claim taken from it | Supporting quote or figure |
|---|---|---|---|---|---|---|---|---|
| 1 | Spotify | spotify/helios repository | source | archived 2024-09-12 | 2026-09-14 | https://github.com/spotify/helios | Helios was built because no open-source orchestrator existed, and was abandoned when one did | "This project was created when there were no open source container orchestration frameworks. Since the advent of Kubernetes and other tools, we've stopped using helios at Spotify and have now switched to other tools like Kubernetes." |
| 2 | Spotify | helios README, master branch | source | archived 2024-09-12 | 2026-09-14 | https://raw.githubusercontent.com/spotify/helios/master/README.md | The sunset notice is the first heading of the README, above the description | "## Status: Sunset" |
| 3 | Spotify | spotify/helios tags | source | 2014-05-30 onward | 2026-09-14 | https://github.com/spotify/helios/tags?after=0.8.0 | Helios was public from May 2014, so the in-house orchestrator predates Kubernetes 1.0 | Oldest tags listed: 0.0.23 "May 30, 2014", 0.0.24 "Jun 4, 2014" |
| 4 | Spotify | com.spotify:helios-client on Maven Central | source | latest 0.9.283 | 2026-09-14 | https://repo1.maven.org/maven2/com/spotify/helios-client/maven-metadata.xml | Helios shipped 0.0.33 through 0.9.283 as a published Java artifact | <latest>0.9.283</latest><release>0.9.283</release> |
| 5 | Spotify | spotify/apollo repository | source | archived 2021-09-28 | 2026-09-14 | https://github.com/spotify/apollo | Archiving was a publishing decision: development continued inside Spotify | "most of its development has recently been done internally leveraging Apollo's module system ... Apollo development will continue internally in Spotify." |
| 6 | Spotify | spotify/styx repository | source | archived 2023-07-12 | 2026-09-14 | https://github.com/spotify/styx | The OSS repo was discontinued while the system was running more than 10,000 production workflows | "We decided to discontinue the Styx oss repo."; "more than 10000 production workflows" |
| 7 | Spotify | spotify/styx README | source | archived 2023-07-12 | 2026-09-14 | https://github.com/spotify/styx | Styx ran Luigi-orchestrated jobs in Docker containers on Kubernetes, on Datastore and Bigtable | "schedule batch data processing jobs in Docker containers on Kubernetes"; "Google Cloud Datastore, Google Cloud Bigtable and Google Container Engine" |
| 8 | Spotify | spotify/heroic repository | source | archived 2021-03-27 | 2026-09-14 | https://github.com/spotify/heroic | The in-house time series database was frozen, not migrated in public | "This repo is no longer actively maintained. While it should continue to work and there are no major known bugs, we will not be improving Heroic or releasing new versions." |
| 9 | Spotify | heroic build.gradle, master | source | last change 2021 | 2026-09-14 | https://raw.githubusercontent.com/spotify/heroic/master/build.gradle | The final published Heroic build pins log4j-core 2.13.3, inside the Log4Shell range | dependencySet(group: 'org.apache.logging.log4j', version: '2.13.3') with entries log4j-core, log4j-api, log4j-1.2-api |
| 10 | GitHub Advisory Database | GHSA-jfh8-c2jp-5v3q, CVE-2021-44228 | postmortem | 2021-12-10 | 2026-09-14 | https://github.com/advisories/GHSA-jfh8-c2jp-5v3q | log4j-core 2.13.3 falls inside the affected range, 258 days after Heroic was archived | Affected: "≥ 2.13.0, < 2.15.0"; severity Critical, CVSS 10.0 |
| 11 | Docker Inc | spotify/heroic image on Docker Hub | source | last updated 2021-03-26 | 2026-09-14 | https://hub.docker.com/v2/repositories/spotify/heroic/ | The archived system is still distributable and has been pulled thousands of times | pull_count: 6462, last_updated: 2021-03-26 |
| 12 | Docker Inc | spotify/luigi image on Docker Hub | source | last updated 2018-02-06 | 2026-09-14 | https://hub.docker.com/v2/repositories/spotify/luigi/ | Artefacts outlive their maintenance: an image last built in 2018 has 16,791 pulls | pull_count: 16791, last_updated: 2018-02-06 |
| 13 | Spotify | spotify/docker-client repository | source | archived 2022-03-21 | 2026-09-14 | https://github.com/spotify/docker-client | A live internal dependency was pinned by an already-dying project's build file | "The version of docker-client we're using is whatever helios has in its pom.xml. At this point, we're not developing or accepting new features or even fixing non-critical bugs." |
| 14 | Spotify | spotify/dockerfile-maven repository | source | archived 2022-03-31 | 2026-09-14 | https://github.com/spotify/dockerfile-maven | A widely forked build plugin (2.7k stars, 474 forks) was archived in the same sweep | "At this point, we're not developing or accepting new features or even fixing non-critical bugs." |
| 15 | Spotify | spotify/spydra repository | source | archived 2022-03-31 | 2026-09-14 | https://github.com/spotify/spydra | The Hadoop-to-Dataproc bridge was retired once the migration ended | "Ephemeral Hadoop clusters using Google Compute Platform"; "Note This project is inactive." |
| 16 | Spotify | spotify/zoltar repository | source | archived 2023-10-18 | 2026-09-14 | https://github.com/spotify/zoltar | In-house model serving for TensorFlow, XGBoost and scikit-learn was retired | "Common library for serving TensorFlow, XGBoost and scikit-learn models in production." |
| 17 | Spotify | spotify org, archived repositories | source | listing as of 2026-09-14 | 2026-09-14 | https://github.com/orgs/spotify/repositories?q=archived%3Atrue | 163 of Spotify's public repositories are archived | Listing header: 163 archived repositories; entries include helios (Sep 12, 2024), styx (Jul 12, 2023), zoltar (Sep 11, 2023), dns-java (Aug 1, 2024), talos (Aug 6, 2024) |
| 18 | Spotify | spotify org, archived repositories page 2 | source | listing as of 2026-09-14 | 2026-09-14 | https://github.com/orgs/spotify/repositories?q=archived%3Atrue&page=2 | Retirement happens in batches: eight repositories carry a March 2022 date | scanctl, lingon, hdfs2cass, docgenerator, netty-zmtp, spydra all "Updated Mar 31, 2022"; cassandra-medusa and comet "Mar 29, 2022" |
| 19 | Spotify | spotify org, active repositories | source | listing as of 2026-09-14 | 2026-09-14 | https://github.com/orgs/spotify/repositories?q=archived%3Afalse&sort=updated | 126 repositories are active, and the recent ones are product libraries and agent tooling rather than infrastructure | Total 126; recent entries confidence-sdk-js, confidence-resolver (Rust), pedalboard, ads-agentic-tools, flink-on-k8s-operator |
| 20 | Spotify | spotify/flink-on-k8s-operator | source | active, beta | 2026-09-14 | https://github.com/spotify/flink-on-k8s-operator | Spotify adopted and now maintains a Google-originated operator, running Flink and Beam on its own Kubernetes | "an open source fork of GoogleCloudPlatform/flink-on-k8s-operator with several new features and bug fixes"; 227 stars, 932 commits |
| 21 | Spotify | spotify/dbeam repository | source | production since 2017-08 | 2026-09-14 | https://github.com/spotify/dbeam | A fourth exit door exists: software declared finished rather than abandoned | "Mature, maintained and used in production since August 2017"; "No major features or development planned" |
| 22 | Spotify | spotify/luigi repository | source | active | 2026-09-14 | https://github.com/spotify/luigi | The 2012 workflow library outlived the 2016 scheduler built to run it | Maintained by Spotify's data team; 18.8k stars, 4,320 commits |
| 23 | PyPI | luigi release history | source | 2012-10-21 to 2026-05-07 | 2026-09-14 | https://pypi.org/pypi/luigi/json | Luigi has shipped 87 releases across fourteen years and still releases in 2026 | first ('1.0', '2012-10-21'), last ('3.8.1', '2026-05-07'), 87 releases |
| 24 | PyPI | annoy release history | source | 2014-03-24 to 2023-06-14 | 2026-09-14 | https://pypi.org/pypi/annoy/json | Annoy's last release is six weeks before its successor's first | first ('1.0', '2014-03-24'), last ('1.17.3', '2023-06-14') |
| 25 | PyPI | voyager release history | source | 2023-07-28 to 2024-12-13 | 2026-09-14 | https://pypi.org/pypi/voyager/json | Voyager took over from Annoy in mid-2023 | first ('1.2.5', '2023-07-28'), last ('2.1.0', '2024-12-13') |
| 26 | Spotify | spotify/voyager repository | source | 2023 onward | 2026-09-14 | https://github.com/spotify/voyager | The replacement is justified on recall, not on memory layout, and runs at high query volume | "like Annoy, but with much higher recall"; "queried hundreds of millions of times per day to power numerous user-facing features" |
| 27 | Google Cloud | Spotify's journey to the cloud: why Spotify migrated its event delivery system from Kafka to Google Cloud Pub/Sub | blog | 2016-03-03 | 2026-09-14 | https://cloud.google.com/blog/products/gcp/spotifys-journey-to-cloud-why-spotify-migrated-its-event-delivery-system-from-kafka-to-google-cloud-pubsub | The pre-migration stack and its scale: Kafka 0.8, HDFS, Crunch-MapReduce, 700k events per second | "700,000 events per second"; load tested at "2,000,000 messages per second"; previous stack "Kafka", "HDFS", "Crunch-MapReduce for ETL into AVRO" |
| 28 | Google Cloud | Spotify's experiments with stream processing on Google Cloud Dataflow | blog | 2016-03-11 | 2026-09-14 | https://cloud.google.com/blog/products/gcp/spotifys-experiments-with-stream-processing-on-google-cloud-dataflow | Dataflow replaced the Kafka, HDFS and Crunch-MapReduce pipeline, with windows and watermarks as the new operational surface | Lists what was replaced ("Kafka", "HDFS", "Crunch-MapReduce") and the topics of the migration: "window and watermark to work with late arriving data" |
| 29 | Spotify | com.spotify artefacts on Maven Central | source | directory listing | 2026-09-14 | https://repo1.maven.org/maven2/com/spotify/ | The Java-era estate is legible as a single directory: apollo-*, crtauth, dns, docker-client, crunch, dataproc-java-submitter, bigtable-autoscaler, heroic, scio, dbeam | Directory entries include apollo-api/, crtauth/, dns/, crunch/, dataproc-java-submitter/, bigtable-autoscaler/, docker-client/ |
| 30 | Backstage / CNCF | backstage/backstage repository | source | CNCF incubation | 2026-09-14 | https://github.com/backstage/backstage | The one platform component Spotify kept building is now a CNCF incubating project with 34.4k stars | "hosted by the Cloud Native Computing Foundation as an Incubation level initiative"; 34.4k stars, 7.6k forks |
| 31 | Backstage | ADR001: Architecture Decision Record log | adr | 2020 | 2026-09-14 | https://raw.githubusercontent.com/backstage/backstage/master/docs/architecture-decisions/adr001-add-adr-log.md | The project's first recorded decision is to record decisions, and it names its own failure mode | "A decision was made to store ADRs in a log in the project repository."; Risks: "People stop adding ADRs to the log and context gets lost." |
| 32 | Backstage | ADR002: Default Software Catalog File Format | adr | 2020 | 2026-09-14 | https://raw.githubusercontent.com/backstage/backstage/master/docs/architecture-decisions/adr002-default-catalog-file-format.md | The open-source catalogue is a port of an internal Spotify system, modelled on Kubernetes objects | "Internally at Spotify, a homegrown software catalog system is used heavily and forms a core part of Backstage"; "draws heavy inspiration from the kubernetes object format" |
| 33 | Backstage | Backstage Enhancement Proposals, README | adr | process doc | 2026-09-14 | https://raw.githubusercontent.com/backstage/backstage/master/beps/README.md | The project added a KEP-style proposal process on top of ADRs, with ownership as the merge condition | "The merging of a BEP means that it is approved for implementation and has an owner that is responsible for said implementation." |
| 34 | Backstage | BEP 0003: Auth Architecture Evolution | adr | created 2024-01-28, status implemented | 2026-09-14 | https://raw.githubusercontent.com/backstage/backstage/master/beps/0003-auth-architecture-evolution/README.md | Four years after open sourcing, the default trust model was inverted to deny by default | "Built-in protection of Backstage instances such that it is safe to deploy Backstage directly towards the internet."; "It will no longer be a requirement to either set up protection of your Backstage instance or not do so and risk exposing your instance to malicious actors." |
| 35 | Backstage | BEP 0003, token size finding | adr | 2024-01-28 | 2026-09-14 | https://raw.githubusercontent.com/backstage/backstage/master/beps/0003-auth-architecture-evolution/README.md | Ownership data in the user token grew until it affected reliability, and had to be moved behind a service | "Separate out the ownership information out of the Backstage user tokens, since user tokens have been growing large enough to have an impact on performance and reliability." |
| 36 | Backstage | BEP 0002: Dynamic Frontend Plugins | adr | created 2024-01-17, status provisional | 2026-09-14 | https://raw.githubusercontent.com/backstage/backstage/master/beps/0002-dynamic-frontend-plugins/README.md | The build-time plugin model is a known adoption barrier, and the fix has been provisional for over two years | status: provisional; "A Backstage installation currently requires quite a lot of care to maintain, meaning it may not be worth the investment for smaller organizations." |
| 37 | CNCF | cncf/toc issue search for Backstage | casestudy | 2020-09-08, 2022-03-15, 2024-09-13 | 2026-09-14 | https://github.com/cncf/toc/issues?q=backstage | The donation timeline: sandbox in September 2020, incubation in March 2022, governance review opened September 2024 | #476 "Add Backstage as CNCF Sandbox project" merged Sep 8 2020; #717 "Propose Backstage to CNCF Incubation Stage" merged Mar 15 2022; #1598 "[Governance Review]: Backstage" open since Sep 13 2024 |
| 38 | Backstage | Security advisories, listing pages 1 to 7 | postmortem | 2021-06-03 to 2026-09-11 | 2026-09-14 | https://github.com/backstage/backstage/security/advisories | 69 advisories are published, and 37 of them carry a single date, 28 August 2026 | Pages 1-3 and most of page 4 dated "Aug 28, 2026"; page 7 dated Jun 3 2021 through Feb 14 2023; page 8 empty |
| 39 | Backstage | GHSA-g2v8-7jhw-pp8p, Sensitive information exposure in Scaffolder | postmortem | 2026-08-28 | 2026-09-14 | https://github.com/backstage/backstage/security/advisories/GHSA-g2v8-7jhw-pp8p | The most severe published defect is a cross-user read of template execution data, CVSS 9.6 | "An authenticated Backstage user who can read another user's Scaffolder task may receive internal execution data. In deployments where that data contains credentials for an external service, this may permit disclosure and unauthorized changes in that external service." |
| 40 | Backstage | Advisory listing page 7 (2021 to 2023) | postmortem | 2021-11-26, 2023-06-21 | 2026-09-14 | https://github.com/backstage/backstage/security/advisories?page=7 | The template engine has been the recurring soft spot since 2021 | GHSA-2g8g-63j4-9w3r "RCE vulnerability affecting v1beta3 templates in @backstage/plugin-scaffolder-backend", High, Nov 26 2021 |
| 41 | Backstage | Advisory listing pages 5 and 6 (2024 to 2026) | postmortem | 2023-06-21 to 2026-03-11 | 2026-09-14 | https://github.com/backstage/backstage/security/advisories?page=6 | The same two features keep producing findings across five years | GHSA-wg6p-jmpc-xjmr "Insecure sandbox in Backstage Scaffolder plugin", High, Jun 21 2023; GHSA-6jr7-99pf-8vgf "Arbitrary code execution via MkDocs hooks in TechDocs", High, Jan 30 2026 |
| 42 | npm | @backstage/plugin-scaffolder-backend registry metadata | source | 2020-06-17 to 2026-08-28 | 2026-09-14 | https://registry.npmjs.org/@backstage/plugin-scaffolder-backend | The remediation release for the 37-advisory day is dated the same day | created 2020-06-17; 2,144 versions; latest 4.1.0 published 2026-08-28 |
| 43 | npm | @backstage/backend-common registry metadata | source | 2020-04-30 to 2024-09-17 | 2026-09-14 | https://registry.npmjs.org/@backstage/backend-common | The old backend core is deprecated in the registry, with 1,347 published versions behind it | latest 0.25.0 (2024-09-17), deprecated: "This package is deprecated, please follow the deprecation instructions for the exports you still use" |
| 44 | npm | @backstage/core registry metadata | source | 2020-03-26 to 2021-06-24 | 2026-09-14 | https://registry.npmjs.org/@backstage/core | Backstage's first public package dates the open sourcing, and was itself superseded inside fifteen months | created 2020-03-26 (0.1.1-alpha.0); last version 0.7.14 on 2021-06-24 |
| 45 | Backstage | Issue 26665, timeout at 14k user entities | source | opened 2024-09-13, closed not planned | 2026-09-14 | https://github.com/backstage/backstage/issues/26665 | Adopters find the catalogue's scale ceiling, and the finding is closed unresolved | "every fetch request will timeout" at roughly 14,000 user entities; 9,000 entities fine, 21,000 total entities frozen; closed as not planned |
| 46 | Backstage | Issue 27907, slow facet queries | source | opened 2024-11-28, closed not planned | 2026-09-14 | https://github.com/backstage/backstage/issues/27907 | Catalogue facet queries cost seconds at a few thousand entities | over 2,000 components; facet queries "1-3 seconds, occasionally reaching 6 seconds"; catalog page load 6.5 seconds; closed as not planned |
| 47 | Backstage | PR 20409, continued MySQL support | source | closed unmerged 2024-01-31 | 2026-09-14 | https://github.com/backstage/backstage/pull/20409 | A second database engine was rejected on maintenance cost, not on capability | Maintainer Rugvip: "why support clustering of this data at all? It's never expected to be any particularly large volume of data"; complexity "not maintainable long-term" |
| 48 | Backstage | PR 32623, queue service | source | opened 2026-02-02, closed unmerged | 2026-09-14 | https://github.com/backstage/backstage/pull/32623 | A core async-job service was held back for want of a first internal consumer | Maintainer: "I do think we should aim for something that could conceivably replace some of the catalog processing queues" |
| 49 | Backstage | Closed unmerged pull requests by comment count | source | 2021 to 2026 | 2026-09-14 | https://github.com/backstage/backstage/pulls?q=is%3Apr+is%3Aclosed+is%3Aunmerged+sort%3Acomments-desc | The rejected-design record is substantial and concentrated on core architecture | #15519 "[PRFC] Rethink GraphQL plugin", 141 comments, closed Aug 29 2023; #29196 "[BEP 0006] Scaffolder Action Rollback (via checkpoints)", 90 comments, closed May 7 2026 |
| 50 | Backstage | backstage/community-plugins repository | source | 2024 onward | 2026-09-14 | https://github.com/backstage/community-plugins | Roughly 60 plugins were moved out of the core monorepo into per-workspace ownership and releases | "each plugin workspace has its own changesets and isolated releases"; 9,702 commits, 697 forks |
| 51 | Red Hat | redhat-developer/rhdh | casestudy | active | 2026-09-14 | https://github.com/redhat-developer/rhdh | A downstream distribution shipped dynamic plugins while the upstream proposal stayed provisional | "an enterprise-grade Internal Developer Portal based on Backstage"; dynamic-plugins-root directory; "formerly known as janus-idp/backstage-showcase" |
| 52 | Backstage | ADOPTERS.md | casestudy | living document | 2026-09-14 | https://raw.githubusercontent.com/backstage/backstage/master/ADOPTERS.md | Roughly 290 organisations list themselves as adopters, Spotify included as its own first entry | Spotify's row: "Main interface towards all of Spotify's infrastructure and technical documentation."; 290 table rows |
| 53 | Backstage | Releases listing | source | v1.54.7 and v1.49.7 both 2026-09-11 | 2026-09-14 | https://github.com/backstage/backstage/releases | The project maintains several release lines at once and patches them on the same day | v1.54.7 and v1.49.7 both dated September 11; v1.55.0-next.2 September 8 |
| 54 | Backstage | Frontend system documentation | vendor | current | 2026-09-14 | https://raw.githubusercontent.com/backstage/backstage/master/docs/frontend-system/index.md | The migration to the new frontend system is recommended while the enabling proposal is still provisional | "We recommend migrating your frontend plugins to the new frontend system." |
| 55 | Backstage | Backend system documentation | vendor | current | 2026-09-14 | https://raw.githubusercontent.com/backstage/backstage/master/docs/backend-system/index.md | The backend was re-architected around plugins, modules and services with split deployments | "how to split your backend into multiple deployments for better scalability and security isolation" |
| 56 | Spotify | spotify/XCMetrics | casestudy | active | 2026-09-14 | https://github.com/spotify/XCMetrics | The build-metrics platform is a rare published internal scale figure | "collected almost 1 million builds and over 10 billion steps from all Spotify iOS applications" |
| 57 | crates.io | confidence_resolver crate | source | created 2026-01-19 | 2026-09-14 | https://crates.io/api/v1/crates?q=confidence-resolver | Spotify's newest published infrastructure component is a Rust crate, first released in 2026 | "created_at":"2026-01-19", "downloads":72115, "num_versions":25, "description":"Local resolver for Confidence feature flags" |
| 58 | Backstage | Roadmap 2026 issue | source | opened 2025-12-09 | 2026-09-14 | https://github.com/backstage/backstage/issues/32083 | Direction is now set by community input rather than by the originating company | "Backstage continues to grow through community collaboration, and this issue is an open invitation to help shape where we focus our collective efforts in 2026." |
What is not in this corpus, and what that costs
- No outage postmortem. Spotify publishes none that this session could reach, and the Backstage project publishes security advisories rather than incident reviews. Every entry in the failure section of the guide is therefore an advisory, a bug report from an adopter, or a defect visible in a build file. Blast radius is mostly unknown as a result, and the guide says so on each card.
- No talks and no papers. Both are hosted where this session cannot reach.
- No internal architecture. The music serving path, the recommendation stack, the storage layer behind them, and anything Spotify never published, are absent. The guide's claims are about the platform layer that leaves a public trace.
- One vendor-hosted pair of sources. The two 2016 posts are Google's write-ups of Spotify
engineering posts. They are graded
blogbecause the technical content is Spotify's, and they are the only pre-2020 narrative evidence in the corpus.