"Het Sinterklaasjournaal wordt spannend." De laatste keer dat ik die zin hoorde, was het van een neefje van een jaar of zes. Hij zag in deze tijd van het jaar uit naar de dagelijkse serie waarin kinderen, en volwassenen, de gebeurtenissen rond de aankomst van Sinterklaas en de voorbereidingen voor pakjesavond volgen. Maar het is toch nét iets anders om het te horen van een volwassene.
Als je afgelopen twee weken een programma van de Nederlandse Publieke Omroep hebt teruggekeken, is je ongetwijfeld opgevallen dat er iets is veranderd. De site is gewijzigd en ook de player is anders. Aan de achterkant is nog veel meer veranderd. Douwe de Vries en Danny Eerens waren als architect en technical lead betrokken bij het nieuwe NPO Start.
Waarom er een nieuw NPO Start nodig was? De Vries: "Het oude NPO Start, of NPO Start Classic zoals we het intern zijn gaan noemen, voldeed niet aan de doelstellingen die we hebben. We wilden een stabiel platform bouwen, dat altijd bereikbaar is en áls het dan down is, moet het snel weer up and running zijn. Dan moet het zichzelf ook herstellen: design for failure."
Voor het project konden De Vries en Eerens met een schone lei beginnen. "We hebben intern een businessafdeling en die hebben we het plan uitgelegd", zegt Eerens. "Toen we tweeënhalf jaar geleden begonnen, waren er al stappen gezet en er waren ook al mock-ups voor hoe het eruit moest zien. We begonnen met 5 of 6 mensen, inmiddels is de afdeling gegroeid naar 20 tot 25."
De architectuur
:strip_exif()/i/2006234652.jpeg?f=thumblarge)
Het basisidee was om te werken met mach-architectuur. Dat staat voor microservices, api first, cloud native en headless. Die microservices verwijzen naar een opbouw van een dienst met kleinere diensten die onafhankelijk van elkaar kunnen functioneren. Dat zijn bij het nieuwe NPO Start onder meer de tv-gids, series en de player. De Vries: "Daardoor kan het ene deel een storing hebben zonder dat het invloed heeft op de rest. Dus als de gids offline is, blijft on-demand terugkijken gewoon werken. Dat vonden wij belangrijk."
Api first verwijst ernaar dat alle streams via interne api's te benaderen zijn. Eerens: "We hebben natuurlijk veel verschillende platforms waarop we aanwezig zijn. Naast desktop en mobiel zijn dat smart-tv's en settopboxen bijvoorbeeld. Doordat de architectuur api first is, kunnen we de frontends van al die apps aanpassen aan het platform."
Bovendien is het hele platform cloud native. Dat is om verschillende redenen belangrijk. Eerens: "Als je op Play drukt, registreren we dat via Amazon AWS, maar de stream zelf komt bijvoorbeeld weer bij het cdn vandaan natuurlijk. Sommige dingen zijn toch al specialistisch. Zoals betalingen voor abonnementen: dat ligt gewoon bij een payment provider. Het is niet logisch om dat zelf helemaal op te bouwen."
Het voordeel van cloud native is natuurlijk dat het goed kan schalen. De Vries: "We draaien in verschillende datacenters, allemaal in Europa. Dat is natuurlijk belangrijk om te voldoen aan de Europese AVG-wetgeving op het gebied van privacy. Veel dingen, zoals betalingen en het cdn, liggen ook al bij Nederlandse partijen."
De laatste is headless en dat verwijst natuurlijk naar de ontkoppeling van de backend en de frontend. De Vries: "Een van de doelen die we hebben gehaald, is dat we het fundament hebben neergezet met technische standaarden, zodat we vernieuwingen in het systeem tot in het oneindige kunnen faciliteren. Mochten er dingen veranderen, zoals het cms aan de achterkant of de site aan de voorkant, dan kan dat fundament blijven staan. Het zijn dan modules die je verwisselt."
Hoe werken die modules? Eerens: "Die koppelingen werken via berichten en dat is gewoon json. Dat is natuurlijk een de facto standaard hiervoor. Dan kun je werken met verschillende talen en technieken. We kunnen geleidelijk met de hele stack over naar iets anders als dat nodig is."
De code is verder vooral NodeJS en PHP, zegt De Vries. "We ondersteunen ook Python en andere talen als dat makkelijker is voor de implementatie van features. Soms is een bepaalde taal gewoon heel geschikt. De api's die we hebben, werken met request en response, daarin is PHP al jarenlang best goed."
De player
Een van de belangrijkste onderdelen is de videospeler zelf. Ook die is niet helemaal zelf ontwikkeld. "Het is een andere leverancier", zegt Eerens. "Dat was een groot migratieproject. De focus lag op het zo snel mogelijk beginnen van de stream met zo laag mogelijke buffertijden, maar los van video afspelen moeten de video's ook veilig zijn."
Veilig? "Ja, die veiligheid ligt vooral bij beperkingen door rechten en wetgeving. Sommige series mogen we alleen in Nederland laten zien, andere programma's zijn in bepaalde landen wel en in andere niet beschikbaar. Bovendien is er een betaald product met NPO Plus, waarin je met hogere resolutie kunt kijken en programma's langer kunt terugkijken. Je wilt niet dat gratis gebruikers daar per ongeluk bij kunnen. Dat moet je goed kunnen afschermen, anders kom je in de problemen met de partijen waarvan je bijvoorbeeld series koopt." Op die lagere resolutie voor gratis gebruikers komen we straks terug.
Al die beperkingen zijn 'vinkjes' in het cms. De Vries: "Programmamakers kunnen dat aangeven en er is een afdeling die extra checkt of alle rechtenbeperkingen goed staan. Dat zijn opties voor in welke landen NPO Start de stream mag tonen, leeftijdsrestricties, de iconen voor de Kijkwijzer rondom bijvoorbeeld geweld of seks. Die metadata is belangrijk, want daarmee weet het systeem waar en wanneer het een stream mag laten zien."
/i/2006234656.png?f=thumblarge)
De player zelf is nu nog rudimentair. "De leverancier heeft de kern van de player gemaakt, maar wij hebben onze eigen schil en de code zo ontkoppeld dat we geen lock-in hebben. Ook omroepen zelf gebruiken die player; het is dus niet alleen voor NPO Start. In die schil kunnen we nieuwe features gaan zetten." Nu zitten daar onder andere al de afspeelkwaliteit en afspeelsnelheid als opties in.
De player is serverless, zegt Eerens. "Die schaalt automatisch mee en de streams komen dus bij een externe partij vandaan. Daar zijn afgelopen jaren eigenlijk geen grote problemen mee geweest. De hele dienst NPO Start is grotendeels serverless met autoscaling. De systemen houden in de gaten hoe druk het is en als de drukte bepaalde drempels overschrijdt, komt er capaciteit bij."
Die piekmomenten zijn er op het moment van het interview, enkele dagen na de livegang, nog niet veel geweest. "Dan moet je denken aan grote sportevenementen. In een van de eerste dagen hadden we 500.000 requests in vijf minuten; dat was gewoon het achtuurjournaal. Boer Zoekt Vrouw zal wel een piek gaan opleveren en het Sinterklaasjournaal wordt spannend."
Ja, want gaan de intocht en pakjesavond wel door? "Nee, het gaat om terugkijken. Veel mensen zetten die stream binnen korte tijd aan en daarmee verwachten we dus echt wel een grote test voor het systeem. Blijft alles online en zo nee, herstelt het zich dan snel?" Tussen interview en publicatie begon het Sinterklaasjournaal. En inderdaad: de intocht kon doorgaan. En o ja, op de piek leverde de eerste aflevering 750.000 requests in vijf minuten op. Het systeem kon dat aan.
/i/2006234658.png?f=thumbmedium)
/i/2006234660.png?f=thumbmedium)
Dus komt het dan door piekdrukte dat gratis gebruikers zijn beperkt tot 960x540 pixels met 1,2Mbit/s, terwijl betalende klanten met 1920x1080 pixels met 5Mbit/s kunnen kijken? De Vries: "Nee hoor, die beperking is niet technisch. De architectuur is erop voorbereid en we hebben de capaciteit ervoor. Ik weet dat die vraag intern ook speelt. We kunnen het aan, maar ik wil geen verwachtingen scheppen; of dat gebeurt, is niet aan ons."
De diverse apps
Doordat de backend en frontend helemaal gesplitst zijn, zijn er mogelijkheden voor de apps om zich beter aan te passen per platform. Waar NPO zelf de site, de app voor telefoons en die voor Android TV en tvOS van Apple ontwikkelt, ligt de ontwikkeling van apps voor bijvoorbeeld Samsungs tv-platform Tizen extern. Eerens zegt dat die apps echt anders zijn. "Alle data komt uit de api's en vanwege beveiliging en zorgen rond reverse engineering wil je sommige dingen ook echt niet in die apps hebben."
Bovendien zijn apps nu per platform beter aan te passen. "In de Android-app wil je natuurlijk ondersteuning hebben voor Google Chromecast. Bij Android TV is dat niet logisch, want dan kijk je al op tv en hoef je niet meer te casten." Daarnaast kunnen ze nu een eigen tijdlijn volgen voor ontwikkeling, zegt De Vries. "Ze zitten aan elkaar vast. Als er nieuwe functies zijn, kunnen we die deels via de api aanbieden in alle apps, terwijl andere dingen juist alleen in de frontend kunnen."
Wie nu de dienst opent, ziet een bètalabel staan. "Dat is ons een beetje om het even, want het was al wel klaar om live te gaan voor ons." Er was een uitgebreid traject om te testen, zegt Eerens. "We zijn al sinds december vorig jaar bezig, eerst intern. Daarna volgden tests met groepen gebruikers van ongeveer duizend mensen. Ook hebben we intern getest met de omroepen erbij en er was een open bèta. Nu is het live voor iedereen."
Wat bij een dienst die voor iedereen beschikbaar moet zijn, belangrijk is, is toegankelijkheid. "We zijn wettelijk verplicht om te voldoen aan de laagste vorm van de WCAG-richtlijn", zegt De Vries. WCAG staat voor Web Content Accessibility Guidelines en moet ervoor zorgen dat ook onder meer slechtzienden de site kunnen bezoeken en gebruiken. "Wij willen een niveau hoger zitten dan wat we wettelijk moeten. Een belangrijk element is bijvoorbeeld audiodescriptie in de player, zodat mensen met een visuele beperking programma's ook goed kunnen volgen. We zijn continu aan het kijken naar wat redelijkerwijs kan."
De nabije en verre toekomst
Dat betekent niet dat het nieuwe NPO Start af is, zegt De Vries. "Het is echt een V1. We hebben in feedback gehoord dat mensen dingen missen of verwarrend vinden. Radio zit er nu niet meer in, maar dat komt er in een aparte dienst met podcasts bij: NPO Luister. We hebben live kijken samengevoegd met de gids, maar dat heet nu Live en het is niet voor iedereen duidelijk dat de gids daarin zit."
Maar het eerste project op de roadmap is het toevoegen van favorieten. "Dat is waar we de meeste feedback op kregen tot nu toe", zegt Eerens. "De oude NPO Start had dat wel en nu zit het er niet meer in. Veel mensen willen dat terug, dus daar gaan we mee bezig."
De reacties zijn niet mals. De listings van de app in de Play Store tonen veel negatieve reviews met klachten. Behalve dat ze favorieten missen, hebben sommige gebruikers moeite met de nieuwe interface zelf. "Ik ben digitaal niet vaardig en op hoge leeftijd", schrijft een gebruiker. "Bij iedere lay-outwissel ondervind ik problemen om de app te bedienen. Ik vind dat er geen rekening gehouden wordt met de oudere mens." Ook klagen mensen erover dat de volgende aflevering niet gelijk start. Een afdeling binnen NPO verzamelt en bundelt de feedback die overal online verschijnt, zodat De Vries en Eerens kunnen kijken welke zaken belangrijk zijn om te gaan ontwikkelen.
Favorieten en kunnen doorkijken staan daarbij vooraan. "Het is een bewuste keuze geweest om nu live te gaan met een iets mindere featureset en de focus te leggen op een solide en stabiele basis. We breiden gefaseerd uit om grip te houden en te allen tijde in de lucht te blijven."
De reacties waren niet onverwacht. De Vries: "We nemen alle klachten serieus, tegelijk horen klachten bij verandering. Dit zien we ook bij nieuwe releases van andere partijen. Het aantal klachten is ook relatief klein als je kijkt naar het totale gebruik; er is een stille meerderheid. We vinden het mooi om te zien dat mensen de NPO-app gebruiken en genoeg betrokken zijn om ons via de reviews feedback te geven om de app te verbeteren. Het is nu aan ons om deze mensen te helpen en zo de beoordeling bij volgende versies hopelijk te zien verbeteren."
Daarnaast hebben ze op persoonlijke titel ook nog wel dingen waaraan ze zouden willen werken. De Vries: "Wat me mooi lijkt, is dat we live persconferenties bijvoorbeeld realtime kunnen vertalen in heel veel talen. Met kunstmatige intelligentie lijkt dat nu goed mogelijk te worden. Er zijn veel mensen voor wie informatie in bijvoorbeeld de coronapersconferenties belangrijk was, maar dat zouden ze beter begrijpen met een vertaling in het Duits, Turks of Arabisch. Op die manier kunnen we meer mensen in Nederland bereiken dan we nu doen."