Al weer 7 jaar geleden liet Robert Dijkgraaf in Zomergasten zien hoe alles weer uit van alles bestaat. Kleine onderdelen die samen weer grotere gehelen vormen die samen weer nog grotere gehelen vormen en zo verder, en terug. Hij illustreerde dit aan de hand van een alweer 30 jaar oud filmpje: powers of 10.
Powers of 10: Van 100 tot 1024 naar 10-14
Op hun eigen schaal lijken alle onderdelen waaruit iets bestaat weer mooie afgeronde dingen. En op een afstand lijken al deze onderdelen ook nog eens perfect samen te hangen.
Ook in ontworpen zaken zie je dergelijke herhaling en samenhang. Een chip lijkt in detail wel een metropool. En de printplaat waarop deze bevestigd zit eveneens. En in een echte metropool bevinden zich dan ook weer vele van dit soort elektronische metropolen waar dagelijks ontelbare hoeveelheden elektronen hun werk doen.
Ook als je kijkt naar samenwerking zie je dat dit plaats vindt op alle niveaus. Overal vindt communicatie plaats. Cellen die communiceren via zenuwbanen en stoffen, vloeistoffen die communiceren, mensen die communiceren, organisaties die communiceren en communicatie tussen volkeren.
Op softwaregebied is het niet veel anders (hoewel het voor de niet ingewijde minder goed zichtbaar is). Wanneer je kijkt naar een besturingssysteem dan zie je software, maar die software bestaat eigenlijk uit allerlei kleine programma’s. Kleine programma’s die deels weer bestaan uit wat men dan bibliotheken noemt: kleine programmaatjes die voor de gemiddelde mens echter niets meer betekend.
Het aardige van communicatie in de echte wereld is dat het robuust is en het veelal om weet te gaan met fouten. Alle individuele blokjes opereren redelijk zelfstandig. En fouten, eigenlijk onverwachte gebeurtenissen, worden veelal vanzelf opgelost zonder dat het bewust is ontworpen.
In software is zelfstandigheid vaak ver te zoeken. Software blokjes zeggen al snel: “Maar dat stond niet in de specificatie!” Vervolgens geven ze een foutmelding (of erger: een onverklaarbaar resultaat). De leveranciers van de software praten net zo: zonder ook maar even stil te staan bij klantvriendelijkheid.
Een oplossing om tot een perfecte samenhang te komen is om de specificatie volledig uit te schrijven en vervolgens te accorderen en te bouwen, maar dat is praktisch onmogelijk. Een alternatieve oplossing is om automatisch uitvoerbare testen te maken, die continue in de gaten houdt of alles nog goed gaat. Maar alles in de gaten houden is eigenlijk zoiets als iedere inwoner van een land de hele dag door voorzien van een politie-agent. Deze ‘het is goed of het is fout’-controle maakt nog geen robuuste samenleving, laat staan perfect en volledig vrij van onverwachte gebeurtenissen.
Zou het anders kunnen? Software die enigszins ‘fouten’ (of gewoon niet helemaal verwachte zaken) accepteert? Software die ‘sociaal’ is en soms iets overneemt wat een ander stukje eigenlijk beter had moeten doen. Zoals een taken in onze hersenen worden overgenomen, zoals waterkracht ingezet kan worden wanneer windenergie tekortschiet. En zoals buren elkaar idealiter helpen wanneer de ander iets even niet kan.
Met het strikte regime moet je er vanuit gaan dat alles en iedereen het bekende spelletje meespeelt. Totdat er toch echt iets faalt. De onverwachte gebruikersinvoer, de koppeling met een systeem dat toch niet zo goed in elkaar zit als de producent ooit heeft beloofd, de database connectie die weg valt. Het netwerk dat toch niet altijd beschikbaar is. De stroom die tijdelijk uit valt. En dan? De eindgebruiker toch maar die foutmelding geven? Kun je er geen rekening mee houden dat zelfs het onverwachte soms gebeurd?
Merk op dat ik het hier niet alleen heb over het uiterlijke, de gebruikerservaring. Ook binnen ‘je eigen’ gecontroleerde software wereld zou je misschien eens moeten proberen los te laten dat alles aan strikte regels kan voldoen. De wereld veranderd. Jouw software krijgt straks misschien ook weer andere input. Je hoeft niet bang zijn om het systeem aan te passen wanneer je weet dat het ecosysteem van jouw submodules klappen kan opvangen.
In het plaatje hierboven laat ik drie vormen zien. De linker afbeelding toont een keurige perfecte samenleving, maar als een vierkant veranderd in een driehoek valt het uitelkaar. Aan het einde van het spectrum is complete chaos. Het werkt wellicht, maar het is niet te overzien en niet te onderhouden. Ik ben echter voorstander van een tussenvorm: met beperkte overlap in functies ookal gaan onderdelen daarmee buiten hun verantwoordelijkheden. Het zorgt er echter voor dat de onderdelen in staat blijven om zwakheden van de andere onderdelen beter op te vangen. Het is dan ook niet het pad naar chaos (het rechtse plaatje).
Natuurlijk heb je een bepaalde verantwoordelijkheid en kan een leverancier niet zomaar het uitwisselingsformaat aanpassen omdat hij of zij dat eenmaal nu wat handiger vindt en daarom zijn automatische testen (de politieagenten in de software wereld) zinvol. Maar een ietwat flexibele houding is wel net zo vriendelijk. Wel zo sociaal. De eindgebruiker is de laatste persoon die lastig gevallen moet worden met uit de hand gelopen discussies over specificaties. Laat de computer eens ‘ja’ zeggen.
Vond je dit leuk, volg me op Mastodon, voeg die RSS, euh ATOM feed toe aan je feedreader, of schrijf je hieronder in op mijn nieuwsbrief.
Dit artikel van murblog van Maarten Brouwers (murb) is in licentie gegeven volgens een Creative Commons Naamsvermelding 3.0 Nederland licentie .