
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.
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.
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.
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.
2M+ simultaneous users at peak
7.6M ratings during semi-finals & final
250K+ app downloads
0 downtime during live shows
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.
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.
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.

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.