zondag 27 december 2020

Zondebokken zonder zondebokken

Stel, je hebt een machine. Op deze machine zit een knop. Hier staat met grote letters bij "Niet op deze knop drukken". Als je namelijk op deze knop drukt, leg je de hele machine stil. Toch zijn er steeds opnieuw weer mensen, die op de knop drukken. Wat doe je?

De reden dat ik hieraan denk, is door zaken waar ik de laatste tijd zelf veel tegenaan loop. Ik vind het belangrijk om problemen te benoemen. En ja, dat komt regelmatig neer op: collage x deed y en daardoor is probleem z ontstaan. Regelmatig kom ik mensen tegen, die daardoor automatisch ervan uitgaan, dat ik de schuld bij collega x neerleg. En ja, soms doe ik dat ook. Meestal echter niet. Ik wil de situatie beschrijven, het probleem beschrijven. In mijn ogen zijn we nog lang niet toe aan het aanwijzen van een schuldige. Als we dat al ooit zijn.

Stel dat ik als tester een ernstige bug gemist heb. Een die nooit in productie had mogen komen. Hoe ga ik hiermee dan mee om? Voor mij is dan de eerste vraag: "Had ik dit kunnen voorkomen?" Dit is een vraag naar kennis, ervaring en tools. Beschikte ik over de kennis om de bug te voorkomen? Dit kan gebeurt zijn in een scherm, waar nooit iemand me over verteld zijn. Via een programma, waarvan ik het bestaan niet wist. Ook kan het zijn, dat ik het wel wist, maar niet kon testen. Voor dit scherm heb ik namelijk de rechten niet gekregen. Of ik beschik niet over voldoende testdata om die betreffende situatie na te gaan. Bij zulke problemen is het antwoord: "Nee, dit had ik niet kunnen voorkomen". De oplossing gaat dan ook in de richting van meer kennis, betere tools. En soms is het gewoon: "Nu ik dit weet, gaat dit niet nog een keer gebeuren". 

De volgende vraag is een stuk moeilijk: "Had ik het moeten voorkomen?". Ik werk 40 uur per week en deze tijd moet ik verdelen over al mijn werk. Daarom moet ik keuzes maken in wat ik wanneer test en hoe. Waar ik mijn tijd aan besteed. Stel ik heb scherm A minder heb getest, omdat ik scherm B beter wilde testen. Vervolgens heb ik door het testen van scherm B 5 ernstige bugs voorkomen, was dit dan een verkeerde keus? Zelfs als later blijkt dat in scherm A alsnog een grote fout zit? En wat als ik inschat dat de kans op een fout in scherm A zeer klein is, maar in scherm B groot. Vervolgens test ik scherm B beter en vind niets. Was dat een foute keuze, als scherm A later een ernstige bug blijkt te hebben? Want wat als ik zeg "Ja" en ik kies dan scherm A beter te testen, maar later blijkt mijn inschatting juist en hierdoor gaat scherm B naar productie met 5 ernstige fouten?

Deze vraag heeft te maken met risico inschatting. En hier is een goed besef nodig van het volgende: ook als het verkeerd uitpakt, kan de risico inschatting goed zijn geweest. Daarom is van belang niet naar het resultaat te kijken, maar naar het proces. Hoe is het risico bepaalt? Want ja, regelmatig blijkt dat het risico niet goed is ingeschat. Omdat een aanpassing toch meer code raakte dan ik dacht. Of omdat een proces belangrijker was dan gedacht. Maar het antwoord kan ook zijn: de risico inschatting was goed, ongeacht het ongewenste resultaat. De kans was 1 op 1000 en dat was bekend. Helaas was dit de 1 op 1000.

Wat het verschil is met de eerste vraag? Ja, ik heb nu misschien ook kennis gebrek, maar met de kennis, ervaring en tools die ik had, had ik de bug wel kunnen voorkomen. Ik besloot echter tot handelingen, waardoor de bug gemist is.

Als beide vragen "Ja" zijn, komt de laatste vraag: "Waarom heb ik de bug niet voorkomen?" Waren er teveel testen, waardoor ik op de automatische piloot ging werken? Waren er te weinig testen, waardoor ik zaken vergeten ben? Was ik te druk, waardoor ik niet geconcentreerd genoeg was? Lette ik op teveel zaken tegelijkertijd, waardoor ik niet meer 100% kon geven? Als ik de oorzaak weet, dan kan ik op zoek naar een oplossing.

Waarom dit hele verhaal? Omdat een veelgebruikte of veelgenoemde oplossing hier niet tussen staat: tegen mij zeggen dat ik de volgende keer beter moet testen. Zelfs niet: tegen mij zeggen dat ik de volgende keer scherm A moet testen, omdat deze een ernstige bug bevat. Waarom niet? Om twee redenen:

  • Ik ben ervaren genoeg om te weten dat dit niet nog een keer mag gebeuren. Over het algemeen hoef je me dat niet te vertellen.
Maar wat voor mij nog veel belangrijker is:
  • Door zulke opmerkingen suggereer je dat ik iets fout heb gedaan, iets beter had kunnen doen. Puur alleen om het feit dat er iets fout is gegaan. En hoewel je gelijk kan hebben, kan je net zo goed ongelijk hebben. Puur het feit dat door mij een fout in productie is gekomen, zegt nog niet dat ik de bug had kunnen of moeten vinden.
Ik hecht veel belang aan het goed evalueren van een probleem of bug. En ik weet dat de enige die me daarbij kan helpen collega x is. Daarom, als ik zeg dat collega x door y probleem z heeft veroorzaakt, bedoel ik: we hebben collega x nodig om dit probleem in de toekomst te voorkomen.

Dus die machine met die rode knop? Ik zou gaan praten met alle mensen, die erop gedrukt hebben. Hoe en waarom dat gebeurt. Hoogstwaarschijnlijk zou ik niet de tekst "Niet op deze knop drukken" groter maken. Of elke maand mensen eraan herinneren dat ze goed moeten lezen voor ze iets doen. Waarschijnlijk zou ik kijken of we de knop kunnen verplaatsen naar een minder zichtbare plek. Of de knop afdekken, zodat je er niet zomaar op kan drukken. Want het werkelijke probleem zal waarschijnlijk zijn: het is veel te makkelijk om op de knop te drukken voor een knop, die bijna nooit nodig is.