Cover Image for Practice what you preach

Practice what you preach

2018 August 126 min read
Joep van de Laarschot
Joep van de Laarschot

Wat wij geleerd hebben van een rommelige update

Software en website updates zijn berucht. Er zijn genoeg verhalen van (grote) bedrijven die plat gaan doordat er iets misgaat bij het updaten van software. Ook al hou je de software simpel en klein, zoals jodiBooks, en probeer je alles te testen. Er kan nog steeds vanalles fout gaan.

We vinden het altijd heel vermakelijk om te lezen dat grote bedrijven beknibbelen op software en updates en dan in de problemen komen. Kennen jullie het geval van die Engelse bank waar klanten weken of zelfs maanden niet bij hun geld konden?

green tests

Om dit te voorkomen bij jodiBooks, wordt er veel getest. Soms tot grote frustratie van mij, omdat een nieuwe versie weer later af is dan gepland. Maar hoe goed je ook test, software blijft complex en er gebeuren soms onverwachte dingen. Dat kan gebeuren, maar je moet dan wel een (backup) plan hebben…

Wij vinden dat (alle) bedrijven transparant en eerlijk moeten zijn als er iets foutgaat. Dus ook jodiBooks, dus bij deze: Bij de update van jodiBooks naar versie 1.6 hebben we fouten gemaakt. Gelukkig hebben onze klanten er niks van gemerkt, maar we hebben er zelf wel even goed stress van gehad.

Wat ging er fout

Aankondiging en planning

Het ging eigenlijk al fout bij de beslissing om de update te doen. In onze algemene voorwaarden staat dat we een update een week van te voren aankondigen. Maar als een klant er niks van merkt, moeten we ze dan lastig vallen met een e-mail? Zeker in de fase waarin we nu zitten, zullen er veel updates zijn, dus ook veel e-mails.

We hadden zelf ons weekend helemaal volgepland. Diana zou een release doen, zodat ik screencasts kon maken met de meest recente versie. Hiervoor had ik het hele weekend ingepland. Het maken van filmpjes kost (mij) namelijk veel tijd. En het is zonde om het daarna weer opnieuw te moeten doen.

Deze geplande release liep al uit van vrijdagmiddag naar zaterdagochtend. De tijd werd dus nog krapper (alarmbel 1). We waren "gelukkig" vergeten om het aan te kondigen, dus konden we hem "gewoon doen". Diana checkte of niemand was ingelogd en hop, de nieuwe versie werd online gezet. Tijdens dit proces moest er iets met de hand worden gefixt (alarmbel 2) maar daarmee was het probleem snel opgelost.

We konden dus, weer net iets later dan gepland, aan de slag met het maken van de filmpjes. Maar, tijdens het maken van de screencasts kregen we opeens een foutmelding. SHIT!

1 pU7iRHDhcKrQOMR2ISpXJw

Na intensief speurwerk werd de fout gevonden, maar herstellen was niet zomaar te doen. Dus besloten we om de update terug te draaien. Eerst offline opnieuw testen, voordat we versie 1.6 terug online zetten.

Normaal zouden we dus een backup van een paar uur eerder terug hebben gezet. Maar omdat we onze update niet hadden aangekondigd, zoals we zelf beloven, had een klant nieuwe bonnetjes aangemaakt. Een backup van de database terugzetten was dus geen optie meer.

Diana heeft dus met meer handmatige acties de dagelijkse functionaliteit moeten herstellen. Dit is zo goed als mogelijk getest, maar hiermee hebben we wel een nieuwe bug geïntroduceerd. Het is nu niet mogelijk om je standaard btw tarieven aan te passen.

Technisch

Het lijkt natuurlijk logisch dat nieuwe fouten juist in de nieuwe functionaliteit zitten. De fout kwam uiteindelijk ook vanuit de btw-tarieven. Maar juist iets nieuws test je extra goed. Dus waar ging dit fout?

btwtarieven

Het is gefixt!

Ten eerste was Diana nog niet klaar met het schrijven van alle testen. De basis was dus wel getest, maar nog niet alle mogelijke gevallen (voor zover je die kunt voorspellen). Een specifiek geval werd dus niet opgemerkt: het kiezen van een btw-tarief bij een regel op een bon uit het verleden.

Dit zit vooral in hoe de database ooit is opgebouwd. Diana heeft ooit bedacht dat het supercool en handig zou zijn om bitemporele databases te gebruiken. Dit is theoretisch prachtig, maar praktisch een draak om te onderhouden.

De tweede reden is dan ook dat we nog oude code en technieken hebben die we eigenlijk niet meer gebruiken. Al die oude meuk zit in de weg, maar je moet er wel rekening mee houden. Beetje bij beetje slopen we het uit de code, maar eigenlijk is er een grote opschoonactie nodig. Deze is ingepland na de release van jodiBooks S.

Onze lessen

Testen testen testen

Sowieso moeten we de nieuwe features en hun impact op de rest van de website testen. En ook al schrijft Diana ontzettend veel tests, er zal altijd iets doorheen blijven vallen. Dit komt enerzijds doordat we jodiBooks snel willen laten groeien tot een volwassen product. Het moet dus allemaal relatief snel.

Anderzijds is het heel moeilijk om je eigen werk te controleren. Diana moet de nieuwe functionaliteit dus niet zelf testen. Dit moet iemand anders doen, in dit geval ik.

Vanaf nu ga ik dus, voordat we een nieuwe versie online zetten, eerst testen of alles nog werkt. Dit ga ik doen door onze screencasts "opnieuw" te maken. Zo klik ik alle knopjes aan, die onze klanten ook dagelijks aanklikken. Én ik controleer of het makkelijk werkt. Én de handleiding wordt geüpdate. Win-win-win.

Plannen

Nog belangrijker dan testen. We moeten ons houden aan onze afspraken. Dus van tevoren onze klanten op de hoogte stellen van een update. Zo worden ze niet verrast door nieuwe knopjes en kunnen ze er rekening mee houden dat ze jodiBooks even niet kunnen gebruiken.

We gaan vanaf week 33 (18 juli) gaan we iedere twee weken een release doen op zaterdagavond. Ook plannen we meteen een eventuele tweede kans op zondagochtend. Dit gaan we inplannen en aankondigen op Facebook en iedere gebruiker zal ook per e-mail op de hoogte gebracht worden. We hopen dat we langzaam de updatefrequentie kunnen afbouwen naar maandelijks.

facebook event

https://www.facebook.com/events/214234335939910/

Ook gaan we een backup plan maken. Wat gaan we doen als er iets fout gaat? Bijvoorbeeld zodra er iets handmatig moet worden aangepast. Dan stoppen we meteen met de update, gaan we eerst offline testen voor we een nieuwe poging doen. Lukt het niet op zaterdavond of zondagochtend, dan zullen we twee weken wachten.