Complexiteit

Hoge complexiteit van programmatuur wordt in het algemeen aangenomen als iets dat inherent is aan software. Het blijkt echter dat software in de praktijk veel minder complex gemaakt kan worden. Dit wil niet zeggen dat software eigenlijk triviaal is, maar dat de "essentiële", inherente complexiteit veel lager is dan

Als software zoveel eenvoudiger kan, waarom gebeurt dat dan niet? "Simple isn't easy": het bereiken van eenvoud is niet makkelijk. Het schrijven van software is moeilijk; het schrijven van zo eenvoudig mogelijke software is nog moeilijker.

Onnodige complexiteit kruipt bijna ongezien in de code, regel voor regel. Als je er niets aan doet, bouwt zich in de loop van weken, maanden, jaren een ontwerpschuld (achterstallig onderhoud) op. Het introduceren van duplicatie door veelvuldig kopiëren en plakken van bestaande code is een bekend voorbeeld. Onnodige complexiteit zit echter ook in de kleinste details, in onschuldig lijkende zaken als de naamgeving van variabelen en functies.

De ontwerpschuld heeft een rente-op-rente effect: als je er niets aan doet, wordt het wijzigen en uitbreiden van de code steeds moeilijker, zodat je steeds meer extra complexiteit toevoegt om wijzigen te kunnen maken. Het wegwerken van de schuld wordt steeds lastiger en onaantrekkelijker. Uiteindelijk resulteert dit in software die ineenstort onder de schuldenlast. Ook op kortere termijn manifesteert de ontwerpschuld zich, bijvoorbeeld in de vorm van nieuwe fouten die geïntroduceerd worden bij het verhelpen van andere fouten.