--- layout: default ---

Survival of the fittest

##Survival of the fittest

Patronen

Robert Pirsig verdeelt in zijn boek ‘Zen and the art of Motorcycle Maintenance’ de wereld in 2 typen patronen: statische - en dynamische patronen. 

Statische patronen zorgen ervoor dat alles blijft zoals het is. Een voorbeeld van een statisch patroon in de biologie is celdeling, waarbij een cel via DNA alle kennis uit het verleden doorgeeft aan een dochtercel. 

Dynamische patronen zorgen voor verandering. DNA mutatie is een voorbeeld van een dynamisch patroon waarmee soorten zich op den duur aanpassen aan veranderende omstandigheden.

Beproefd of nieuw?

In software ontwikkeling zijn deze patronen ook actief. Zo zijn er altijd weer ontwikkelaars die staan te popelen om aan de slag te gaan met de nieuwste technologieën. En er zijn ontwikkelaars die zich hoofdschuddend voor al dit jeugdige gedartel terugtrekken in hun bastion en terugvallen op beproefde technologie.

Uitzonderingen daargelaten willen beide partijen uiteindelijk vaak hetzelfde: de klant zo goed mogelijk helpen. De statische club hecht meer waarde aan ervaringen uit het verleden en de dynamische club heeft een groter vertrouwen in de toekomst. Voor beide standpunten zijn legio voor- en tegenargumenten te vinden.

Survival of the fittest

Vanaf een bepaald standpunt bezien is er geen strijd en geen probleem, maar vullen de twee patronen elkaar perfect aan. De statische patronen zorgen dat lessen uit het verleden niet opnieuw geleerd hoeven te worden en de dynamische patronen zorgen voor aanpassing aan veranderende omstandigheden. 

Alhoewel ‘survival of the fittest’ vanuit het standpunt van individuele organismen een strijd op leven en dood is, zorgt het op een ander niveau voor gezonde en goed aangepaste organismen.  Op dezelfde manier zorgt de strijd tussen voorstanders van de nieuwste technologieën en voorstanders van beproefde technologieën op den duur voor een gezond software ecosysteem.

Gezond ecosysteem

Het helpt als de balans van een gezond software ecosysteem bewust gezocht wordt. 

Kiezen we een stabiele, statische kern en proberen we daar stap voor stap vernieuwende technologieën in op te nemen? Dat zorgt dat we nooit al te ver terugvallen in robuustheid en onderhoudbaarheid. 

Proberen we zo snel mogelijk te ontdekken of de nieuwe technologie de lessen uit het verleden respecteert? Dat voorkomt dat we later voor onaangename verrassingen komen te staan. 

Zorgen we dat de nieuwe technologie geïsoleerd wordt opgezet? Dat zorgt dat we vrij makkelijk kunnen overschakelen naar alternatieve implementaties. 

Controlelijst 

Bij de afweging voor het gebruik van nieuwe software of nieuwe technologieën kan het handig zijn om de volgende punten in overweging te nemen:

Lock in. Hoe moeilijk is het om over te schakelen naar een nieuwere versie of een andere implementatie van deze software?

Opinionated Architecture. Kunnen we ontwikkelen in een richting die het beste bij deze applicatie past, of moeten we ons volledig conformeren aan de wensen van de gebruikte software?

Accidental Complexity. Gaat onze tijd verloren met uitzoeken hoe de nieuwe technologie werkt, of kunnen we onze tijd besteden aan het implementeren van functionaliteit?

Testability. Is het makkelijk om functionaliteit automatisch te testen met kleine, snelle testen zonder door al te veel hoepels te hoeven springen?

Performance. Wat is de snelheid, ‘cpu footprint’ en ‘memory footprint’ van de totaaloplossing in productie?

Monitoring. Hoe makkelijk is het om het uiteindelijke totaalproduct te monitoren?

Zo’n lijst is een prima statisch hulpmiddel om nieuwe, dynamische oplossingen in overweging te nemen. Pas wel op met het in beton gieten van dit soort overwegingen in bedrijfsstandaarden. De dynamische patronen moeten ook hun werk kunnen blijven doen!

Menselijke factor

Vaak lijken technische keuze’s gemaakt te worden op basis van argumenten als in voorgaande lijst. Maar vergeet de menselijke factor niet! Beide clubs (statisch en dynamisch) zijn namelijk heel vergelijkbaar op 1 punt: ze krijgen niet graag een technologie opgedrongen. De dynamische club kan weinig met ‘middeleeuwse’ oplossingen en de statische club kijkt argwanend naar nieuwe oplossingen die zich nog lang niet bewezen hebben.

Willen of moeten werken met bepaalde software en technologieën levert heel verschillende resultaten op. Als je echt wilt, kun je met slecht gereedschap tot een goed resultaat komen. Maar als je moet werken met bepaalde gereedschappen, ziet elk technisch hobbeltje eruit als de mount everest. 

Of zoals Peter Drucker mooi verwoord heeft: ‘Culture eats strategy for breakfast’. En dat is dan wederom een strijd tussen statisch en dynamisch, maar dan op een heel ander niveau. Misschien een aardig onderwerp voor een volgende blog.