Wie is de Mol?-app

Met flink wat fervente Wie is de Mol?-spelers onder de Q'ers, waren we heel enthousiast toen AVROTROS een pitch uitstuurde voor het bouwen van hun nieuwe app. Na het winnen van de pitch hebben we in 2023 samen de oude apps en back-end vervangen. Belangrijkste uitdaging: een app die op piekmomenten miljoenen gebruikers aan kan. Laat dat maar aan ons over!

Wie is de Mol?, uitgezonden door AVROTROS, is al jarenlang één van de meest populaire programma's op de Nederlandse televisie. In het spelprogramma werken verschillende kandidaten samen aan opdrachten maar is er onder hen één mol die het spel in het geheim saboteert. Kijkers kunnen meespelen door via een app punten in te zetten op verdachte kandidaten. Het is de bedoeling dat kijkers de mol ontmaskeren en zo veel mogelijk punten scoren. Dit kan individueel of in een poule met bijvoorbeeld familieleden, vrienden of collega's.

Stabieler en moderner
De Wie is de Mol?-app moest voor het seizoen 2024 vervangen worden. AVROTROS schreef een pitch uit die wij wonnen. Hun wens: een modernere uitstraling én hogere stabiliteit. De belangrijkste techniek- en UX-uitdagingen waren:

  • Op piekmomenten moeten één miljoen spelers tegelijkertijd via de app hun punten kunnen bekijken, inzetten op de mol en zien hoe anderen in de poule het doen.
  • Naast de app wordt er veel data realtime verwerkt in statistieken, zoals de landelijke verdenkingen en als input voor het praatprogramma Moltalk. Het is een uitdaging om een dataflow op te zetten waarin berekeningen de performance van de app niet belemmeren.
  • Het belangrijkste onderdeel van de app is het verdenkspel. Dit omvat een complex stukje UI/UX waarin spelers punten kunnen inzetten op een verdachte kandidaat. Voor het selecteren van een kandidaat is altijd een rad gebruikt. Al langer werd gedacht dat dit verbeterd zou kunnen worden. Maar vanwege het belang van het scherm is er nooit iets aan veranderd.

Een premium app als eindresultaat
Aangezien performance heel belangrijk is bij de Wie is de Mol?-app hebben we als techopzet gekozen voor een cloud-first aanpak met een schalende infrastructuur en efficiënte code. Door in het ontwikkeltraject te focussen op de belangrijkste features en heel veel te (stress)testen met tientallen verschillende telefoons hebben we een premium app opgeleverd die

  • beter presteert dan de oude app,
  • schaalbaar is naar nog meer spelers,
  • eenvoudiger is in gebruik, en
  • toekomstbestendig is.

Schaalbare back-end
AVROTROS wilde graag dat we de infrastructuur op Google Cloud Platform (GCP) zouden ontwikkelen. Dit gaf ons de kans de back-end geheel cloud-based op te zetten met Google BigTable als schaalbare databron, Go als cloud optimised-ontwikkeltaal en gRPC als hele efficiënte communicatie tussen backend en apps. Zonder terug te hoeven vallen op caching kan onze oplossing dus zelf een hoge belasting aan.

Eén miljoen gebruikers
Schaalbaarheid van de back-end was dus het belangrijkste uitgangspunt voor dit project. De piekbelasting is namelijk enorm: rond een aflevering maken één miljoen kijkers gebruik van de app en kunnen de requests per seconden razendsnel oplopen. De rest van de week is de belasting van de app minimaal. Door een schaalbare databron te kiezen, en alle services in pods te stoppen die makkelijk en snel kunnen opschalen, zijn we op alle scenario's voorbereid.

Dataverkeer optimaliseren
Als één miljoen spelers de app aan het gebruiken zijn, is een schaalbare back-end alleen niet genoeg. Ook het dataverkeer tussen de app en back-end moet dan geoptimaliseerd worden. Dit hebben we op twee manieren aangepakt.

  1. De eerste is gRPC. Dit is een geoptimaliseerd communicatieframework dat beter presteert dan REST met JSON of XML, lagere latencies biedt en kan integreren in de apps om mogelijke fouten te minimaliseren.
  2. De tweede optimalisatie is dat we het aantal back-end calls van de app naar de back-end drastisch teruggebracht hebben door de app zelf meer verantwoordelijkheden te geven met state management en door data lokaal op te slaan. Hierdoor hoeven alleen mutaties gecommuniceerd te worden.

Slimme UI/UX-verbeteringen
Zonder de app helemaal opnieuw te ontwerpen heeft de designer van AVROTROS er ook slimme UI/UX-optimalisaties doorgevoerd. Zo was het verdenkspel aan een verbeterslag toe, maar als belangrijkste onderdeel van de app was het spannend deze interface aan te passen. De designer van AVROTROS heeft daarom meerdere interfaces ontworpen om te testen met eindgebruikers. Door deze prototypes snel te testen met echte gebruikers konden we snel itereren. Na het tweede prototype had de designer genoeg feedback en vertrouwen om een definitief nieuw ontwerp te maken. Een concept dat AVROTROS al langer wilde, namelijk het gelijk verdelen van punten over kandidaten, werd hierin een belangrijke nieuwe functie. Deze wens was op de plank blijven liggen, omdat het niet echt paste in het oude concept.

De uitdaging van de liniaal
Het verdenkspel bevat ook een liniaal waarmee spelers punten kunnen inzetten op een kandidaat. Het principe van de liniaal is eenvoudig. Maar de uitdaging is om een overzichtelijke liniaal te creëren die 100 punten en ook 50.000 punten verdelen mogelijk maakt én die lekker swipet. We hebben meerdere prototypes ontwikkeld om het juiste UX-gevoel te bereiken. Er is ook een wiskundige proof-of-concept gemaakt om te bepalen hoe de liniaal meeschaalt met het aantal punten dat iemand heeft. Want vanaf wanneer is een lijntje op de liniaal niet één punt, maar vijf punten waard bijvoorbeeld? En hoe lang mag de liniaal maximaal zijn zodat hij niet te lang of kort wordt?

Stresstesten
Voor de eerste uitzending hebben honderdduizenden spelers de app geïnstalleerd, accounts gecreëerd, poules aangemaakt en punten ingezet. Tussen het moment dat de app te downloaden is tot de eerste aflevering zitten maar een paar weken, waarin er geen ruimte is voor fouten, of het releasen van een nieuwe versie van de app. Hierdoor is goed testen voorwaardelijk geweest in dit traject. Samen met de softwaretesters van Polteq hebben we een cloud-based testsysteem opgezet dat realistische - maar ook veel hogere - load-, piek- en stresstesten kan uitvoeren op verwachte gebruiksscenario's.

Realistische test voor één miljoen spelers
Een realistische test voor de app betekende dat we één miljoen spelers hebben moeten simuleren die het spel spelen. Het belasten van losse endpoints om te zien of de backend goed opschaalt en de load aan kan, is namelijk te eenzijdig. Het is vaak de combinatie van diverse handelingen die tegelijk uitgevoerd worden (read en writes) die problemen aan het licht brengen. Daarom hebben we virtuele spelers ingedeeld in diverse speelstrategieën met hun eigen gedrag. Bijvoorbeeld een casual of fanatieke speler, of een speler die haar punten over meerdere kandidaten verdeelt, of iemand die al vanaf het begin overtuigd is van wie de mol is. Door de virtuele spelers zulke eigenschappen te geven hebben we specifiek gedrag nagebootst en een realistischer beeld gecreëerd.

Dankzij slimme keuzes, vol inzetten op schaalbaarheid en heel goed testen kan de nieuwe Wie is de mol?-app miljoenen gebruikers aan. Spelen maar!!