Refactoring en Hannah Arendt
Uit een praatje van Kevlin Henney1 leen ik de volgende tweet – die dan weer van Yvonne Lam is:
My theory of tech debt is that housework is the correct metaphor for the thing we call tech debt, but we can't use it because tech has been made up of people who don't do housework, or manage housework being done.
— Yvonne Lam (@yvonnezlam) March 29, 2021
Lam stelt dat er een betere metafoor voorhanden is voor dat wat we gewoonlijk “technische schuld” noemen: huishouding (housework).2
(Haar tweet heeft een scherp randje, ze stelt dat we met de mindere metafoor opgescheept zitten omdat de sector vol zit met mensen die zich niet bekommeren om het huishouden (mannen?). Het is een grappige illustratie van hoe onze ervaringen ons wereldbeeld bepalen.3)
Het deed me aan Hannah Arendt denken. (Beroepsdeformatie, denk ik!)
De menselijke conditie
In The Human Condition onderscheidt de filosofe fenomenologisch drie fundamentele activiteiten van het menselijk zijn4 – arbeid (labor), werk (work) en handelen (action).
Arbeid is geassocieerd met het animal laborans, werk met homo faber, handelen met homo sapiens. Arbeid is, temporeel bezien, circulair, werk is lineair, handelen: initiatie. Arbeid keert steeds opnieuw terug, werk doen we richting een doel, handelen is het in gang zetten van iets nieuws. (– Maar natuurlijk doet deze schets geen recht aan de diepgang van haar analyse. In het vervolg van deze blog zal ik me op de eerste twee activiteiten richten.)
Wat heeft dit met Lams tweet te maken? De metafoor die we gebruiken wanneer we technische schuld “afbetalen” is een fundamenteel andere metafoor dan die van doen van je huishouden – koken, wassen, schoonmaken (uitgaan, de financiën op orde houden); zorgen.
Het afbetalen van een schuld is een doelgerichte activiteit met een begin- en eindpunt, een onderneming van homo faber. Huishouden is een steeds terugkerende activiteit, vandaar de circulariteit; de last van animal laborans. De eerste is werk, de tweede arbeid.5
(Verheldering)
(Mijn vrouw vraagt: maar als ik de vloer dweil, dan werk ik toch ook richting een doel, namelijk een schone vloer? En ze heeft een punt. Als we de taak op zichzelf en inhoudelijk bekijken, is dweilen een vorm van werk. Maar bezien vanuit de stroom van het leven – de zoveelste keer dat we (moeten!) dweilen – is het arbeid.
Je zou kunnen zeggen dat het arbeid of werk is naargelang de houding die we aannemen tot de activiteit. – Maar dat klinkt te intellectualistisch, alsof we de keuze maken het zus of zo te zien. Misschien is het beter om zo te stellen: arbeid of werk, dat is onze verhouding tot deze of gene activiteit.)
Afbetalen…
En het verklaart ook iets – misschien. Misschien verklaart het waarom zoveel softwareteams technische schuld op laten bouwen – tot het boven hun hoofd groeit en ze hun managers bekennen: “We kunnen pas verder wanneer we de code fiks onder handen hebben genomen.” – “Hoe lang gaat dat duren?” – “Drie maanden tot een halfjaar.”
Zulke teams zien technische schuld als iets dat zich opbouwt in de loop der tijd. Wanneer er een bepaalde grens is bereikt, wordt de schuld problematisch en dient deze vermindert te worden (maar precies groot genoeg om hakkelend verder te kunnen!). Er wordt een doel gesteld: binnen zus en zoveel tijd willen we de code in deze of gene doeltoestand brengen. En vanaf dat moment is het een kwestie van het bereiken van dat doel – binnen drie tot zes maanden.
…of huishouden?
Zou iets dergelijks ook een team kunnen overkomen dat “het wegwerken van technische schuld” als een huishoudelijke activiteit ziet – als stofzuigen, de afwas uitruimen, de wasmachien inruimen? Laat ik het zo zeggen: een huishoud(st)er die de stofzuiger pas tevoorschijn haalt wanneer de stofnesten zich opstapelen, is geen ster in het huishouden.
De wijsheid van arbeid is: doe het nu, dan hoef je het morgen niet te doen. Want of je het nu vandaag of morgen doet, de afwas moet worden gedaan – en die duplicate code geabstraheerd naar een eigen class –, en morgen is het alleen maar vervelender. In een circulaire tijdsopvatting is het nu doorslaggevend. (Werk wijst daarentegen richting de toekomst.)
(Over Clean Code)
(Wellicht is Robert Martins clean code-metafoor daarom zo treffend. Zijn boek (mijn favoriete boek over softwareontwikkeling in 2020) is een handwerk in het schoonmaken en schoon houden van code.
David Whitney bekritiseert Clean Code (in dit praatje) omdat het vraagstukken over het ontwerp van code heeft gereduceerd tot de vraag welke namen we variabelen we moeten geven. Misschien is dit inderdaad hoe Martins werk is ontvangen – maar het zou kunnen dat de fout dan bij die ontvangst ligt.
Is Clean Code een boek over het ontwerpen van software, of het onderhouden ervan? In geval van het laatste, is het alsof Whitney afgeeft op een boek over schoonmaken omdat het je niet leert je huis in te richten.)
Refactoren
Goede ontwikkelteams houden hun code continu op orde. Als ze nieuw gedrag toevoegen, dan passen ze de structuur van de code aan zodat dat gedrag er goed in past; ze construeren geen bouwwerken op een wanordelijk fundament. Refactoren – zorgdragen voor de structuur van de code (zie ook deze blog), zonder het gedrag te wijzigen; code schoon houden, “opruimen” – is arbeid. Het is, net als schoonmaken, een steeds terugkerende activiteit, zonder definitief einddoel.
Worstelende ontwikkelteams laten hun code verslonzen. Ze bouwen nieuw gedrag bovenop bestaand gedrag, en de naden van hun werk zijn zichtbaar. (Zie ook deze blog.) Refactoren doen ze nauwelijks – alleen wanneer hun stakeholders hen toestemming geven de enorme rommel op te ruimen die de ontwikkelaars zelf gecreëerd hebben.
Fenomenologie
Maar neem het ze eens kwalijk: het ligt niet in de lijn van de ervaring continu zorg te dragen voor het afbetalen van je schuld (tenzij je schulden je boven het hoofd zijn gegroeid, natuurlijk). Mijn hypotheek wordt elke maand automatisch van mijn rekening afgeschreven; ik ben niet de helft van die dertig dagen kwijt aan het zorgvuldig vullen van een spaarpot, om ’m aan het eind in één klap te zien verdampen.
Inderdaad laat de metafoor van technische schuld zich moeilijk rijmen met deze fenomenologie van code onderhouden. Het aanzien van arbeid voor werk heeft de relaties van veel teams tot hun eigen codebase verstoord.6 Hadden ze maar Hannah Arendt gelezen, dan was het wellicht nooit zo ver gekomen!
-
Fun fact: ik zat hier op de eerste rij. En ook dit praatje van Yulia Startsev maakte ik van dichtbij mee – eveneens een aanrader! ↩︎
-
Het oorspronkelijk woord is moeilijk met tevredenheid te vertalen. “Huiswerk” doet teveel aan school denken; “huishoudelijke klusjes” legt te zeer nadruk op de concrete taken waarin het concept zich manifesteert in de werkelijkheid. (Ik zou van beroep een waardeloze vertaler zijn.) ↩︎
-
Cf. “de grenzen van mijn taal zijn de grenzen van mijn wereld”, Wittgensteins Tractatus; misschien ook: “form of life”, uit zijn Philosophical Investigations. (Zie ook deze, deze deze blog) ↩︎
-
“Being-in-the-world” wordt het in haar lemma van de Stanford Encyclopedia of Philosophy genoemd. Het is verleidelijk het als “erzijn” (Dasein) te vertalen, maar daarmee presenteren we Arendt ongewild als leerlinge van Heidegger – wat niet onwaar is, maar haar denken geen recht doet. In het eerste hoofdstuk van het boek noemt ze het “ways of life” (of “bioi"; het Grieks ontleent ze aan Aristoteles) – en dat doet dan weer aan Wittgenstein denken.3 ↩︎
-
De term “housework” komt niet voor in The Human Condition. Maar Arendt bespreekt op verschillende momenten wel het huishouden (household), met name in contrast met het openbare leven in de Griekse polis. ↩︎
-
Een echo uit Kent Becks Tidy First?; zie ook deze blog. ↩︎
clean code · filosofie · refactoren · software ontwikkelaar (rol) · technische schuld · zorg