Problemen met softwarelevering ontstaan zelden plotseling.

Tegen de tijd dat een project duidelijk te maken heeft met terugkerende vertragingen, zijn de zichtbare symptomen meestal al een tijdje aanwezig. Sprintdoelen worden steeds weer niet gehaald. Schattingen worden steeds minder betrouwbaar. Eenvoudige wijzigingen kosten meer tijd dan verwacht. Het team is voorzichtiger gaan werken. Er duiken meer defecten op in onderdelen die eigenlijk al stabiel zouden moeten zijn, als gevolg van wijzigingen in andere delen. Releases vragen meer coördinatie dan zou moeten.

Van buitenaf of op het eerste gezicht kan dit sterk lijken op een bezorgprobleem.

Het management kan zich afvragen waarom het team niet sneller vooruitgaat, waarom de schattingen niet kloppen, waarom ontwikkelaars steeds aan dezelfde onderdelen van het systeem moeten werken, of waarom elke nieuwe functie onverwachte neveneffecten lijkt te veroorzaken.

Dat zijn natuurlijk terechte vragen, maar ze richten zich vaak op de verkeerde laag.

In veel gevallen wordt het leveringsprobleem niet in de eerste plaats veroorzaakt door een gebrek aan inzet, zwakke ontwikkelaars of slecht taakbeheer. De echte beperking is vaak van architectonische aard. Het systeem heeft een punt bereikt waarop de structuur niet langer de snelheid, veiligheid of duidelijkheid ondersteunt die het bedrijf ervan verwacht.

Dit is een lastige fase, omdat het project nog steeds erg actief kan lijken. Er wordt gewerkt. Pull requests worden samengevoegd. Er vinden vergaderingen plaats. De backlog schuift op. Maar onder al die activiteit blijft de prijs van al deze veranderingen alleen maar stijgen.

Het team bouwt niet langer simpelweg functies; het moet voortdurend onderhandelen met de architectuur en ertegen vechten.

Wanneer de architectuur levering niet langer ondersteunt, wordt elke wijziging duurder dan het lijkt.

Deze situatie is belangrijk voor CEO’s, CTO’s, engineeringmanagers en projectleiders, omdat problemen bij de oplevering van architectuur niet lang technisch blijven. Ze leiden al snel tot gemiste afspraken, een trage reactie op marktbehoeften, terugkerende kwetsbare releases, een groeiend aantal incidenten, gefrustreerde teams en uiteindelijk het onnodige afnemende vertrouwen tussen business en engineering.

Hoe eerder deze signalen worden herkend, hoe gemakkelijker ze te corrigeren zijn.

De veelvoorkomende misvatting over architectuur

Architectuur wordt vaak te abstract besproken.

Het wordt gezien als een technische voorkeur, een optionele stap in de ontwikkeling, een diagram, een keuze voor een framework of iets waar senior engineers over discussiëren terwijl de business wacht op oplevering. Dat is niet de juiste manier om ernaar te kijken, en bedrijven die dat wel doen, stellen zichzelf bloot aan onnodige risico's en falen.

Architectuur in software legt een operationele beperking vast, vergelijkbaar met hoe de architectuur van een echt gebouw bepaalt wat er mogelijk is met het gebouw en hoe gemakkelijk het is om er veranderingen in aan te brengen.

Softwarearchitectuur bepaalt hoe gemakkelijk een team wijzigingen kan doorvoeren, risico's kan afschermen, gedrag kan testen, nieuwe ontwikkelaars kan inwerken, kan integreren met andere systemen en kan herstellen van fouten. Goede architectuur betekent niet dat het systeem elegant is volgens een of andere theoretische norm. Het betekent dat het systeem het bedrijf in staat stelt om te blijven veranderen, zonder dat elke wijziging buitensporig risicovol of traag wordt, of onderdelen van de software beïnvloedt die daar niet bij betrokken zouden moeten zijn.

Slechte softwarearchitectuur is niet altijd zo zichtbaar als slechte code.

Soms is de code op zichzelf volkomen begrijpelijk en werkt die prima. Het probleem zit in de structuur van het systeem: onduidelijke grenzen, verborgen afhankelijkheden, gedupliceerde bedrijfsregels, onbetrouwbare contracten en hiaten in eigenaarschap tussen modules, teams of leveranciers.

Daarom worden architectuurproblemen zo vaak onderschat of zelfs niet eens herkend.

Een enkele vertraging van een functie lijkt misschien een lokaal leveringsprobleem. Maar wanneer elke vertraging van een functie hetzelfde patroon heeft, is het probleem niet langer lokaal. Het systeem geeft je deze informatie eigenlijk gewoon.

Leiderschap moet hier aandacht aan besteden voordat de organisatie met de verkeerde interventie reageert.

- Meer druk uitoefenen zal onduidelijke grenzen niet oplossen.
- Meer ontwikkelaars toevoegen kan de wildgroei aan afhankelijkheden verergeren.
- Meer projectmanagement toevoegen zal niet compenseren voor contracten die niemand vertrouwt.
- Meer QA aan het einde toevoegen zal problemen met een systeem dat niet goed getest kan worden niet oplossen.

De juiste ingreep begint met het vroegtijdig herkennen van de architectonische signalen.

5 tekenen van slechte architectuur
5 tekenen van slechte architectuur