— Artikel — № 099

099 —Business

Retainerfactuur sjabloon: zes regels voor legacy sites

Een Utrechtse studio verving het servicecontract van twee pagina's door zes regels op de factuur zelf. Het sjabloon, en de discussies die het voorkomt.

Bovenaanzicht van retainer-factuur met zes handgeschreven regels, manilla tab, messing plaatje, betaalstroken, vulpen, lakzegel.
Hero · gestileerd stilleven№ 099

De factuur als kleinste leesbare contract

Een studio in Utrecht die we kennen, stuurde vier jaar lang servicecontracten van twee pagina's naar hun legacy retainer-klanten. Drie pagina's preambule, twee pagina's clausules, een handtekeningenblok dat na maand twee niemand meer opende. Toen stopten ze ermee. Wat de klant elke maand wél las, soms twee keer, was de factuur. Dus zetten ze het contract op de factuur.

Zes regels. Retainer fee, inbegrepen uren, scope, uitsluitingen, standaardtarief, tarief buiten kantooruren. PDF, één pagina, de onderste helft is de specificatie van wat in rekening is gebracht. De bovenste helft is in feite de vaste voorwaarden, elke cyclus opnieuw afgedrukt.

Dit is een opinie-stuk over waarom dat juist werkt bij een retainer op een legacy site, en hoe die zes regels er na twee jaar bijschaven precies uitzien.

Waarom een legacy retainer een eigen sjabloon nodig heeft

Een retainer op een gloednieuwe build is makkelijk te scopen. De codebase zit in je hoofd. Je weet wat een kleine wijziging aan tijd kost. Een retainer op een WordPress-site uit 2014 met elf inactieve plugins, een child theme dat functions.php op drie plekken overschrijft, en een custom post type geregistreerd in een must-use plugin die niemand heeft gedocumenteerd, is niet makkelijk te scopen.

Het eerlijke antwoord voor de meeste legacy retainers is: ik houd deze site draaiend en reageer wanneer er iets stuk gaat, binnen een afgesproken responstijd, voor een vast maandbedrag. Dingen die niet onder draaiend houden vallen, zitten niet in dat bedrag.

Het probleem is dat die zin minstens vier ongedefinieerde termen bevat. Draaiend kan uptime betekenen, of dat het contactformulier daadwerkelijk aankomt. Reageren kan twee uur later een mailtje terug betekenen, of binnen twee uur een fix. Dingen die niet onder draaiend houden vallen, daar zit de hele discussie.

De zes-regel retainerfactuur is de contractuele versie van die zin, met alle termen gedefinieerd.

De zes regels, regel voor regel

Dit zijn de letterlijke labels uit het huidige sjabloon van de studio:

RETAINER       €X / month, prepaid
INCLUDED       Up to N hours of intervention per calendar month
SCOPE          Keep [domain] resolving, deliverable, patched
EXCLUDED       New features, redesigns, migrations, plugin licensing
STANDARD RATE  €Y / hour, Mon–Fri 09:00–18:00 CET, 30-min minimum
AFTER-HOURS    €Z / hour, all other times, 60-min minimum

RETAINER is de enige regel die een bedrag maal maanden is. Vooruitbetaald is wezenlijk. Een retainer achteraf gefactureerd is alleen maar een servicecontract met een trage afbetaling. Vooruitbetaald zet de toon van de samenwerking: je bent betaald om beschikbaar te zijn, dus dat ben je.

INCLUDED is de regel die de retainer-fee verdient. Twee uur per maand is eerlijk voor de meeste legacy WordPress-sites die niet onder actieve aanval staan. Vier uur is royaal. Het getal is niet hoeveel werk de site nodig heeft (onmogelijk te voorspellen), het is hoeveel werk je vooruit betaald hebt gekregen voordat het meertarief ingaat.

SCOPE is drie werkwoorden. Resolving betekent dat DNS en het certificaat geldig zijn. Deliverable betekent dat canonieke pagina's 200 retourneren en formulieren in een inbox aankomen. Patched betekent dat core, parent theme en actieve plugins binnen één minor versie van de huidige zitten, of vastgepind om een gedocumenteerde reden. Drie werkwoorden is genoeg, meer roept discussie op over impliciete werkwoorden.

STANDARD RATE definieert het tijdvak waarin wordt gefactureerd, niet alleen de prijs. Het venster is belangrijker dan men denkt. Ma-vr 09:00-18:00 CET is ondubbelzinnig. Kantooruren niet.

AFTER-HOURS is het tarief voor alles buiten dat venster, inclusief feestdagen. Het minimum van 60 minuten is bewust gekozen.

De EXCLUDED-regel ís het contract

De moeilijkste regel om op te schrijven is EXCLUDED, want elke uitsluiting is een kleine toekomstige discussie samengevat in één woord. De huidige lijst van de studio is: nieuwe features, redesigns, migraties, plugin-licenties.

Nieuwe features betekent alles wat de site eerder niet deed. Een nieuw veld in het contactformulier is een nieuwe feature. Net als een nieuwe shortcode, een nieuw paginasjabloon, een nieuwe verzendzone, een nieuw ACF-blok. Een bug fixen in een bestaande feature is dat niet.

Redesigns dekt elke wijziging die door esthetiek wordt gedreven en niet door functie. De klant heeft een knop verplaatst: in scope (hij was kapot). De klant wil dat de knop groen wordt: buiten scope.

Migraties is degene waar mensen versteld van staan. Van PHP 7.4 naar 8.2 op de bestaande host is in scope (dat is patchen). De PHP supported-versions tabel maakt het patchritme niet-onderhandelbaar. De site verhuizen naar een andere host, stack, CMS of domein is een migratie en valt buiten scope.

Plugin-licenties betekent: als de licentie van een betaalde plugin afloopt, verlengt de klant die. De retainer dekt het configureren en onderhouden van de plugin, niet het betalen aan de leverancier. Deze regel voorkomt één specifiek terugkerend gesprek.

Het after-hours tarief prijzen

Het standaardantwoord is 1.5x of 2x je dagtarief. Het werkelijke tarief van de studio, na twee jaar data, is 2.2x voor het eerste uur en 1.6x voor elk volgend uur. Het minimum van 60 minuten geldt voor het eerste uur.

De redenering is structureel. De kost van een after-hours melding is niet het uur dat je eraan kwijt bent. Het is de context switch vanuit wat je aan het doen was (slapen, dineren, een film), plus de hersteltijd erna. Een vlakke 1.5x rekent te weinig voor de switch en te veel voor langer werk. Een getrapt tarief prijst die wrijving eerlijker.

Twee praktische effecten van dit tarief. De klant denkt twee keer na voor hij om 22:00 een bericht stuurt dat ook tot 's ochtends had kunnen wachten. Niet omdat hij straffend wordt belast, maar omdat de factuur een week later binnenkomt met een regel van €280 en een specificatie van 90 minuten, en de volgende vraag komt binnen kantooruren. En de developer reageert wanneer het bericht écht urgent is, omdat het tarief de reactie de moeite waard maakt. Een retainer waarbij de klant zich schuldig voelt om 23:00 te bellen, is geen werkende retainer.

Wil je een referentiepunt voor wat het after-hours tarief rechtvaardigt, dan is de OWASP Top 10 de shortlist die de meeste studio's gebruiken. Als de binnenkomende vraag een van die categorieën noemt (we kregen een phishingmail die zich voordoet als ons, de loginpagina geeft rare errors, ik zie een JS-bestand dat we niet hebben uitgerold), dan is het een after-hours melding.

Twee jaar met dit sjabloon

De studio meldt drie dingen na twee jaar met dit sjabloon over ongeveer veertig retainer-klanten.

Het aantal discussies daalde tot vrijwel nul, omdat elke discussie nu wordt opgelost door de factuur opnieuw te lezen. De klant en de developer kijken naar dezelfde zes regels.

De meerwerkregels werden kleiner. Wanneer de retainer-fee, inbegrepen uren en het meertarief allemaal op dezelfde pagina staan, gaan klanten zichzelf reguleren. Ze bundelen vragen. Ze sturen woensdag in plaats van vrijdagmiddag. Ze vragen of iets binnen scope valt vóórdat ze sturen, niet erna.

De EXCLUDED-regel groeide met precies één term per jaar. Jaar één voegde plugin-licenties toe. Jaar twee voegde quota-overschrijdingen van third-party API's toe. Beide kwamen voort uit specifieke discussies. Dat is het juiste tempo, een EXCLUDED-regel die sneller groeit, is een signaal dat de SCOPE-regel niet klopt.

Toen we Pier bouwden om legacy sites via chat te bewerken, was wat we het meest hadden onderschat de audit trail: elke wijziging landt in version history met wie het deed, wanneer, en op welk bestand. Dat past natuurlijk bij een zes-regel factuur, want de vraag is dit factureerbaar wordt beantwoord vanuit tijdstempels in plaats van uit geheugen.

Het kleinste wat je vandaag kunt doen: open je huidige retainer-sjabloon, tel de regels, en kijk of EXCLUDED een lijst categorieën is of een vaag werk buiten scope wordt apart gefactureerd. Als het het tweede is, zit de volgende discussie al in je inbox.

— Vragen —

Welke vermenigvuldigingsfactor moet ik aanhouden voor het after-hours tarief?

De meeste studio's hanteren 1.5x tot 2.5x hun standaardtarief. Een getrapt tarief (rond 2x voor het eerste uur, 1.5x daarna) prijst de kost van een context switch eerlijker dan een vlakke factor.

Mogen inbegrepen uren doorrollen naar volgende maanden?

Nee. Doorrollen maakt van de retainer een vooruitbetaalde pot en moedigt klanten aan vragen op te sparen om ze in één maand te dumpen. Op-of-eraan houdt het ritme stabiel.

Wat als een klant weigert meerwerk te betalen?

Lees samen de factuur opnieuw. Als SCOPE, INCLUDED en STANDARD RATE duidelijk zijn en het werk buiten SCOPE valt, is het gesprek kort. Zijn de regels vaag, dan moet het sjabloon worden bijgewerkt.