Nu de kater na het vieren van ons 25-jarig jubileum is weggetrokken (ja Tweakers is nu 25 jaar oud), vonden we het tijd om terug te kijken op de progressie die we hebben geboekt in het vernieuwen van de frontend, het deel dat het zichtbaarst is voor jou, onze lezer.
Tweeënhalf decennium bestaan is zonder twijfel een voorrecht, maar in de IT-wereld brengt dit ook uitdagingen met zich mee. De voornaamste uitdaging zit bij het developmentteam, dat moet balanceren tussen het opleveren van features en het onderhouden van de codebase zodat deze zoveel mogelijk toekomstvast is. Terugkijkend op de geschiedenis van de site, kunnen we stellen dat de balans niet in orde was. We hebben er in het verleden vaker voor gekozen om nieuwe dingen te bouwen dan om bestaande onderdelen te refactoren zodat ze herbruikbaar zijn. Daar zijn veel redenen voor. Die zijn voornamelijk complex en contextafhankelijk, en vallen buiten de scope van dit artikel.
Maar het is duidelijk: de staat van de frontend is functioneel, maar oud. Begin 2020 zijn we begonnen technical debt in kaart te brengen en zijn we actiever geworden met het terugbetalen van de 'technische lening'. Met negen developers van wie er drie frontendgeoriënteerd zijn, twee productowners en twee UX-designers, is er maar zoveel dat we kunnen doen voor een website met vier verbonden domeinen die elk op zich een website hadden kunnen zijn: een forum, een nieuws- en reviewplatform, een prijsvergelijker en een vraag-en-aanbodplatform.
Prijsalertvoorbeeld
Een voorbeeld waarbij we onlangs tegen technical debt zijn aangelopen, is de prijsalert. Je kunt deze functionaliteit op twee plekken op de website gebruiken: bij een product en op de wenslijst. Bij een product kon je tot voor kort een prijsalert instellen en verwijderen, en bij de wenslijst kun je hem wijzigen en verwijderen.
Prijsalerts bestaan al een hele tijd en door de jaren heen hebben we de functionaliteit uitgebreid en veranderd. We hebben echter verzaakt om hier voldoende documentatie en tests voor te schrijven. Hierdoor kwamen we bij het refactoren van de prijsalertinteractie voor verrassingen te staan. Wat initieel leek op een aanpassing die we vrij snel konden doorvoeren, bleek het dubbele aan tijd te kosten. Eerst was het de bedoeling enkel de prijsalertinteractie te verbeteren, maar bij het testen kwamen we erachter dat op mobiel een aantal elementen op andere plekken werd verplaatst. Dat gebeurde niet alleen met CSS, maar ook met JavaScript. Dit maakte het lastig om de opmaak voor de prijsalert netter te maken. Daarom hebben we het blok met productspecificaties ook meegenomen. Dat resulteerde in een sneeuwbal terug naar de backend, waar we HTML uit PHP moesten halen en naar Twig-templates moesten verplaatsen. Hierbij kwamen we vrij snel in een rabbithole terecht en trokken we een streep wat refactoring betreft; het ging anders nog weken extra kosten.
Hoewel we niets liever willen dan de komende twee jaar enkel refactoren, zou dat ook betekenen dat de website twee jaar blijft stilstaan wat functionaliteit betreft en stilstaan is achteruitgaan. Daar zit niemand op te wachten, dus hebben we besloten om dit strategischer en pragmatischer te benaderen, en een visie te ontwikkelen die ons gaat helpen de juiste beslissingen te nemen.
De frontendvisie
We hebben de frontendvisie opgedeeld in drie pijlers:
- We willen een modern en goed presterende website met mooie, maar bruikbare interacties.
- We willen de set-up modulair hebben, zodat we de website in kleine stappen in isolatie kunnen aanpakken en nooit meer in de oude situatie eindigen.
- We willen dat de website er consistenter uitziet en zich consistenter gedraagt, en dat de samenwerking met onze designers nog efficiënter is.
Hoe gaan we dit realiseren?
- We introduceren een op componenten gebaseerde werkwijze, losjes gebaseerd op atomic design-principes.
- We creëren geen vendorlock-in, dus we introduceren geen frameworks.
- We gebruiken een designsysteem met geautomatiseerde designtokens.
Het doet ons goed te kunnen zeggen dat we het plan al enige tijd geleden, begin 2022, gestart zijn en dat het inmiddels zijn vruchten begint af te werpen. We zijn begonnen met het moderniseren van de frontpage. Dit project hebben we gebruikt om te testen welke frontendtechnologie en technieken we in de nieuwe frontend wilden gaan gebruiken. Een aantal dingen hebben we geadopteerd (webcomponents) en andere afgestoten (React, Tailwind).
Dark mode
Begin 2023 wilden we graag de meest verzochte feature sinds het jaar 0, dark mode, realiseren en zoals in het verleden al vaak aangegeven, kostte dat een flinke refactor voor onze CSS. De moeite die we hebben gestoken in het consolideren en standaardiseren van het kleurenpalet, resulteerde in een iets lichtere light mode en een dark mode die goed wordt gebruikt, op dit moment door ongeveer de helft van onze bezoekers. Nog belangrijker: we hebben de website voorzien van een goede basis voor thema’s. Het onderhoud is eenvoudiger, maar ook het communiceren met de designers is eenvoudiger, doordat we nu kunnen communiceren met kleurnamen die in beide thema’s goed werken. Hiermee is de website weer een stukje consistenter en makkelijker te onderhouden geworden.
Naast de grote projecten hebben we ook elementen op kleinere schaal gerealiseerd:
- We hebben veel van de iconen herschreven.
- We hebben een nieuwe basis gelegd voor pop-ups en modals.
- We hebben een semiautomatische workflow opgezet om designtokens om te zetten in CSS-customproperty's.
- We hebben de basis geschreven voor een nieuwe responsive lay-out gebaseerd op het mobile first-principe (is actief op de frontpage).
- We hebben een componentlibrary opgezet met userinterfacecomponenten.
Toekomst
Het is nog niet honderd procent zeker wat het volgende hoofddoel gaat zijn, maar het lijkt erop dat de Pricewatch wat aandacht en liefde gaat krijgen. We hopen dat we dit iteratief kunnen doen, wat ook zal leiden tot verbeteringen in het ontwerp, de visuele hiërarchie en de interactie voor de meest gebruikte delen van de website.
Ongeacht waar we vervolgens aan gaan werken, één ding blijft zeker en dat is dat jij, de gebruiker, bij elke stap betrokken zult zijn. We proberen altijd te werken aan features en functies die de meeste waarde hebben voor de gebruiker en we valideren de oplossingen altijd voordat we ze gaan bouwen. Dit betekent dat je de komende periode opt-inbètatests zult zien voor onze grotere redesigns en a/b-tests voor de kleinere, incrementele wijzigingen. En last but not least streven al onze product- en developmentcollega’s ernaar om altijd in gesprek te zijn met de community op het forum of in reacties onder artikelen. Op deze manier behouden we een open feedbackloop die ervoor zorgt dat we Tweakers beter maken voor de toekomst.