Het moet een hele tijd geleden zijn geweest dat ik de term ‘wegwerpsoftware’ voor het eerst gehoord heb. Hoewel je de term op meerdere manieren kunt interpreteren, wil ik er in dit stuk een positieve connotatie aan geven.
Is het logisch om software te maken met het idee om deze binnen afzienbare tijd weer weg te gooien? Intuitief zal een ieder antwoorden dat het zonde is om iets te maken dat je gaat weggooien. Het is demotiverend, niet waard er veel moeite in te steken. Anderzijds zal de cynicus opmerken dat in it de betekenis van ‘tijdelijk’ heel rekbaar is, en dat er in een willekeurig groot bedrijf nog allerlei kernsystemen draaien die ooit als tijdelijk bestempeld waren.
Voor de eeuwigheid?
We kunnen de vraag overigens ook omdraaien: is het logisch om software voor de eeuwigheid te maken? De kunstenaar die diep van binnen in de programmeur zit, zal dit in zekere zin wel graag zo zien. Je broedt dagenlang, wekenlang op een stuk software; je schaaft het bij en boetseert het in een mooie vorm; hier en daar nog een fliebeltje ombuigen en een puntje erbij plakken, en dan… dan heb je een prachtig stuk van jezelf op aarde gezet. En je denkt trots: dit mag gezien worden. Sterker nog: als ik er nog een klein beetje meer aan schaaf, dan is het voor anderen ook bruikbaar. Het is emotioneel gezien moeilijk om het dan nog de nek om te draaien, “killing your darling” is tough.
Maar de waarheid is dat het erg moeilijk is om een zelf geschreven stuk software herbruikbaar voor anderen te maken, en dat geldt zowel op technisch als organisatorisch (beheer, documentatie, et cetera) gebied. Nadat je hebt opgeleverd dendert de tijd door en stapelen de technologische nieuwigheden zich op. Jouw zelfgemaakte stuk software blijkt binnen de kortste keren verouderd. Niemand wil het meer gebruiken, laat staan aanpassen of beheren. Er zijn intussen nieuwe frameworks of nieuwe (versies van) programmeertalen die hetzelfde issue veel beter oplossen, of waarin je het probleem veel eleganter kunt oplossen.
Zo nu en dan vervangen
De truc is om niet bang te zijn om software weg te gooien. Als je je houdt aan de principes van “Egoless programming” dan scheidt je de code van de ego’s en wordt het makkelijker om software zo nu en dan te vervangen.
Het goede nieuws is dat ook op architectureel vlak de wereld veranderd is, wat er voor zorgt dat we minder moeilijk hoeven doen over de creatie van wegwerpsoftware. Zo is een architectuur gebaseerd op microservices, opgedeeld in kleine stukken waarin onafhankelijke DevOps-teams zoveel als mogelijk parallel kunnen werken aan fijnmazige services, prima geschikt om af en toe hele stukken opnieuw in te maken. Het is hierin wel belangrijk dat je het weggooien van software absoluut niet ziet als een nederlaag, zoals ook Martin Fowler in zijn stuk over Sacrificial Architecture accentueert.
Goede architecten en programmeurs zullen altijd hun best doen om goede software te maken, en soms kan dat er extreem mooi uitzien. Maar net als bij de prachtige zandmandalas van de Tibetaanse monniken, is er na een lang en minutieus proces tijd voor een afscheidsceremonie. Dat hoeft niet iets droefigs te zijn. De term softwaremandala gaat misschien wat ver, maar het idee van wegwerpsoftware… dat is zo gek nog niet.