Backstage Blog

RSS logo

You're browsing posts of the category Architecture

The End of the Public API Strangler

March 14th, 2022 by Dónal O'Brien and Jorge Creixell

This is the story of how we used the Strangler pattern to migrate our public API from a monolithic codebase to a fully fledged BFF over the course of eight years. It also discusses some of the trials and tribulations we encountered along the way.

Read more…

Tiny Letter from Kafka

October 13th, 2021 by Kaylee Cho

Discover the powerful design of Apache Kafka and how SoundCloud consumes events from Kafka.

Read more…

Service Architecture at SoundCloud — Part 3: Domain Gateways

September 17th, 2021 by Marc Tuduri, Kim Covaci, Bernd Louis and Jorge Creixell

Discover how SoundCloud extended the concept of Value-Added Services to Domain Gateways.

Read more…

Service Architecture at SoundCloud — Part 2: Value-Added Services

August 20th, 2021 by Bejal Lewis and Marc Tuduri

Learn about the evolution of architectural patterns at SoundCloud — from BFFs to Value-Added Services.

Read more…

Service Architecture at SoundCloud — Part 1: Backends for Frontends

July 29th, 2021 by Jorge Creixell

Discover how service architecture has evolved at Soundcloud over the past few years...

Read more…

How (Not) to Build Datasets and Consume Data at Your Company

March 3rd, 2020 by George Roldugin

Two years ago, if an engineering team at SoundCloud needed data produced by another team, in many cases, that team would have had to start by building a dataset from the raw data. That meant there was no standard way to structure data into a dataset, there were errors in understanding and interpreting raw data, and there was no reuse of datasets across teams. Ownership of datasets was with the teams consuming data, even when the data itself was owned and best understood by someone else. By agreeing on an ownership strategy, a common shape for datasets, and standard tooling, SoundCloud was able to streamline these problems away. Now the data and datasets are provided by those who know best about their data, along with the help of tooling built by those who know best about building tools. Read on to learn what datasets look like at SoundCloud and how they are built.

Read more…

How We Develop New Features Using Offsites and Clean Architecture

November 2nd, 2018 by Guilherme Endres

In 2017, our team of six engineers wanted to try out a clean architectural pattern and decided to use VIPER. In the text below, I’ll cover how the team worked on this.

Read more…

Keeping Counts In Sync

May 11th, 2018 by Lorand Kasler

Track play counts are essential for providing a good creator experience on the SoundCloud platform. They not only help creators keep track of their most popular songs, but they also give creators a better understanding of their fanbase and global impact. This post is a continuation of an earlier post that discussed what we do at SoundCloud to ensure creators get their play stats (along with their other stats), both reliably and in real time.

Read more…

How SoundCloud Uses HAProxy with Kubernetes for User-Facing Traffic

December 7th, 2017 by Matthias Rampke

A little less than two years ago, SoundCloud began the journey of replacing our homegrown deployment platform, Bazooka, with Kubernetes. Kubernetes automates deployment, scaling, and management of containerized applications.

Read more…

Leveraging frameworks to speed up our development on iOS - Part 1

October 16th, 2017 by Pedro Piñera

Growth in code bases come with exciting scalability challenges. As the size of our iOS codebase and team at SoundCloud grew, we faced challenges: long compile times and conflicts. Our productivity started to suffer as a result. We took inspiration from the work done in the backend (Building Products at SoundCloud) and applied it to mobile development. The main goal was to get back to a state where development is fun, fast, and would scale as the number of contributors grew. We modularized our iOS project by splitting it up into modules with well-defined responsibilities and public interfaces that interconnect them.

Read more…