Is maximale flexibiliteit in software wel de “holy grail”?

Iedere programmeur is zich ervan bewust dat elk probleem op (ontelbaar) veel manieren is op te lossen. 2 belangrijke variabelen waar je als programmeur bewust of onbewust mee speelt zijn complexiteit en flexibiliteit. Complexe code is code die moeilijk te lezen/begrijpen is, vooral door anderen. Een flexibele applicatie kan gemakkelijk veranderingen ondergaan zonder dat er veel code veranderd hoeft te worden.

Er zijn veel mensen bezig met het zoeken naar de meest flexibele oplossingen, maar is dit wel de “holy grail”? Wanneer je nu software wil ontwikkelen die het beste kan inspelen op veranderingen, is het in veel gevallen niet de variant die het meest flexibel is. Dit omdat zeer flexibele code vaak erg complex te doorgronden is, en daardoor moeilijk op te pakken of te communiceren door andere programmeurs. Wat is dan de “sweet spot”? Moeten we weer terug naar basic, naar procedureel programmeren? Ik denk het niet. Deze code is vaak makkelijk te schrijven, maar wordt al gauw complex om te lezen voor grotere projecten. Daarnaast is de flexibiliteit erg laag hiervan. Een 3-lagen model dan? Komt al meer in de buurt. Dit is vrij eenvoudig te begrijpen voor de meeste programmeurs, en veranderingen zijn relatief eenvoudig door te voeren.

Het is dus NIET correct om aan te nemen dat er een evenredig verband bestaat tussen complexiteit en flexibiliteit. Als we naar onderstaand plaatje kijken, zien we dat de “sweet spot” ergens ligt waarbij de flexibiliteit hoog is, en de complexiteit laag is. Dit is een architectuur waarbij niet te ver vooruit gekeken wordt, maar waar veranderingen eenvoudig door te voeren zijn mede omdat de complexiteit laag is. Welke architectuur voldoet hier het meest aan volgens jou?