AVROTROS / Eurovision Song Contest

2 million simultaneous users. Zero downtime. On the biggest night of the year.

Client

AVROTROS / Eurovision Song Contest

Sector

Media & Entertainment

Deliverables

iOS app | Android app | Python backend

Context

The Eurovision Song Contest is one of the most-watched television events in the world. For AVROTROS, that meant building an app that had to perform for more simultaneous users than most platforms see in an entire year, and where failure would be visible live to millions of viewers.

The challenge was not just scale, but timing. Peak traffic is precisely predictable and extremely concentrated. During the voting window, the infrastructure must scale in seconds, hold stable, and scale back down, while users across every device and every network do the same thing at once.

Elements was brought in to build the full mobile app and backend infrastructure for the event.

What we built

Infrastructure designed for peak, not average

The architecture was built for the most challenging scenario: all users active simultaneously. That required a cloud infrastructure with automatic horizontal scaling, load balancing, and a dedicated voting infrastructure decoupled from the rest of the app.

Native iOS and Android for maximum reliability

We chose native development for both platforms. For an app that gets one chance to perform, a cross-platform compromise was not an option. Every platform-specific optimisation counted, from push notification handling to battery-efficient background processing during the live show.

Real-time voting under full load

The voting system required a backend capable of filtering duplicates, detecting fraud patterns, and aggregating results in real time, while processing millions of requests within a window of a few minutes. The voting infrastructure was built fully decoupled from the content layer to eliminate single points of failure. Averages updated every 20 seconds in the app throughout the live shows.

Results

2M+ simultaneous users at peak

7.6M ratings during semi-finals & final

250K+ app downloads

0 downtime during live shows

Technology choice

Why native over React Native or Flutter?

For most apps, cross-platform is the right choice: one codebase, faster iteration, lower cost. The Eurovision app is not most apps. The combination of consumer-scale peak load, real-time streaming, and zero tolerance for failure meant every layer of the stack had to be maximally predictable. Native Swift and Kotlin gave us direct access to platform-specific performance APIs, precise memory management control under peak load, and the certainty that no abstraction layer stood between us and the metal when it mattered.

The app and backend performed very stable during the live shows, running smoothly in sync with the broadcast.

How we worked

We ran extensive load testing in the weeks before the event: simulated peaks at expected user volume, with adjustments until the infrastructure held stable across all scenarios. On the night itself, an on-call team was standing by as standard procedure for an app in this category.

What is next

The infrastructure built for Eurovision forms the foundation for every subsequent large-scale live event. The patterns for automatic scaling, decoupled voting infrastructure, and real-time aggregation are reusable for any media organisation facing predictable but extremely concentrated peak traffic.

Get in touch:

Rogier de Graaf
Strategy Director
rogier.degraaf@elements.nl

Team as a service

Besides our project-based collaborations, we also offer team members or a complete dev team as a service. Want to know more? Send us a message.