Generatieve AI een kans voor softwareontwikkeling?

23 augustus 2023 Consultancy.nl 8 min. leestijd
Profiel

De rappe opkomst van generatieve AI biedt legio kansen en use cases in allerlei domeinen. Paul Edwards, Chief for Technology Evolution bij AND Digital, verkent voor ons het gebruik van generatieve AI binnen de wereld van softwareontwikkeling.

Het gebruik van generatieve AI-code tools zoals Github Co-pilot of TabNine zou tot een productiviteitsverbetering van 20% tot 50% van de tijd van een developer kunnen leiden.

Deze cijfers zijn waarschijnlijk overschat, vanwege de complexe aard van softwareontwikkeling. Zelfs als deze claims correct zouden zijn voor een individuele developer, zullen de productiviteitsverbeteringen in de meeste organisaties marginaal zijn zonder bredere organisatorische veranderingen. Deze tools kunnen echter helpen bij het uitvoeren van complexer developmentwerk, mits ze worden gecombineerd met andere effectieve werkmethodes en processen.

Generatieve AI een kans voor softwareontwikkeling?

Het meten van productiviteit

Het nauwkeurig kwantificeren van productiviteit en het maken van accurate vergelijkingen tussen individuele developers, teams en zelfs gehele bedrijven, leidt tot voortdurende discussies. In het verleden beoordeelden we een developer simpelweg op de hoeveelheid code die hij of zij kon produceren, vergelijkbaar met het werken aan een lopende band.

Echter, in de huidige praktijk zien we vaak een incorrecte benadering, waarbij ‘story points’ als maatstaf voor productiviteit worden gebruikt, terwijl ze daar naar mijn mening niet geschikt voor zijn. Story points kunnen worden gebruikt om de relatieve omvang van een taak in te schatten. Zo zou een eenvoudige taak bijvoorbeeld vijf story points kunnen krijgen, terwijl complexere taken acht story points toebedeeld kunnen krijgen.

Problemen ontstaan echter wanneer men probeert deze punten terug te converteren naar concrete tijdsschattingen, of wanneer teambeoordelingen gebaseerd worden op onjuiste interpretaties, wat weer kan leiden tot ongezonde concurrentie.

Een betere methode om de prestaties van een developer te beoordelen, is door te kijken naar hun effectiviteit: hun capaciteit om maximale waarde voor de klant te leveren. Dit betekent dat ze in staat moeten zijn om functionele software te produceren die perfect aansluit bij de klantbehoefte. Moderne meetmethoden zoals DORA en SPACE worden steeds vaker toegepast om de frequentie van releases, het aantal fouten en dergelijke te registreren. Op deze manier kan de effectiviteit van de ontwikkelomgeving nauwkeuriger worden vastgesteld.

Toch leidt het gebruik van tools door een developer om sneller code te schrijven niet per definitie tot een snellere oplevering van software. Andere factoren, zoals trage implementaties en problemen bij het samenvoegen van codebranches, kunnen hier immers een stokje voor steken.

Het is ook belangrijk te beseffen dat AI-tools niet elke development taak even efficiënt kunnen uitvoeren. Hoewel deze tools nuttig kunnen zijn voor routinematige taken en het opzetten van simpele structuren, suggereren sommige studies dat ze de productiviteit bij complexere taken daadwerkelijk kunnen verlagen. Dit komt doordat er extra tijd nodig is om de door AI-gegenereerde code te begrijpen en te controleren.

Lees ook: Vrijwel iedere bestuurder erkent belang van generatieve AI.

De productiviteit van een team weegt zwaarder dan dat van een individu

Het scenario waarin één uitzonderlijk productief teamlid aanwezig is terwijl de rest van het team worstelt, lijkt me verre van ideaal. Toch is het een situatie die ik vaak tegenkom, vooral wanneer een team onder druk staat. Ik hoor dan van de meer ervaren teamleden dat “samenwerken mij vertraagt”.

Bij teamwork is het vermogen van het team om waarde te leveren voor de klant van het grootste belang. Een individu dat zijn persoonlijke productiviteit vermindert om anderen in het team te helpen kan meerdere voordelen opleveren. Deze omvatten het verhogen van de totale productiviteit van het team, het bevorderen van vertrouwen en het versterken van kennis en veerkracht.

“Pogingen om het werk van software engineers te verpakken in duidelijke kaders resulteren vaak in teleurstelling.”

In dit scenario zijn generatieve AI-tools alleen nuttig als ze bijdragen aan de algehele productiviteit van het team. Als de tools kunnen worden ingezet om taken te automatiseren, komt er meer tijd vrij voor meer samenwerking rond complexere taken.

Het werk van software engineers is complex

Het werk van software engineers is inherent complex. Het omvat namelijk het oplossen van problemen in een chaotische, niet-lineaire omgeving waar er geen eenduidig goed of fout antwoord op een vraagstuk is en waar diverse afwegingen gemaakt moeten worden.

Er zijn pogingen gedaan om dit werk te verpakken in duidelijke kaders door het aannemen van projectmanagement-methodieken of tools zoals low-code/no code. Dit resulteert uiteindelijk echter vaak in teleurstelling, omdat het werk niet binnen de gecreëerde modellen past of de tools niet alle mogelijke scenario’s dekken.

AI-tools kunnen mogelijk een deel van de ingewikkeldheid wegnemen door te helpen bij het schrijfproces van code. Echter, zelfs met hun huidige mogelijkheden, kunnen de tools zelfstandig omgaan met de algehele complexiteit van het werk. Het effectief omgaan met deze complexiteit vraagt van teams dat ze continue levering, test-gedreven ontwikkeling en andere extreme developmenttechnieken leren en toepassen, samen met op samenwerking gerichte en cross-functionele manieren van werken.

Het begrijpen van code kan niet worden uitbesteed

Als AI wordt ingezet om code te schrijven, maar het eindresultaat moeilijker te begrijpen is en moeilijker te onderhouden is op de lange termijn, dan verlaagt dit de totale productiviteit van iedereen die deze code moet lezen of onderhouden. Het sneller produceren van slechte code kan nimmer een gewenst resultaat zijn.

Het begrijpen van de code en het voorspellen van het gedrag kan niet volledig worden overgelaten aan een hulpmiddel. Communicatie en begrip staan centraal in het teamwork binnen een developer team. Dit wordt vaak gedelegeerd aan tools, terwijl het in werkelijkheid effectiever via gesprekken wordt gedaan. Het risico is dat deze tools worden misbruikt, wat kan leiden tot slechtere communicatie tussen individuen en teams, resulterend in een afname van het gedeelde begrip binnen een team.

Het effect van samenwerking op door AI gegenereerde code

De productiviteit van developers kan niet op zichzelf worden bekeken. Developers opereren immers in samenwerking met andere mensen en processen. Ze vertegenwoordigen één stap in een proces om waarde te leveren aan gebruikers, van het begin van een idee tot de uiteindelijke vrijgave en evaluatie van de gebruikerservaring. Het komt zelden voor dat de capaciteit van developers om meer en sneller code te schrijven de hoofdbeperking is voor een bedrijf om deze waarde te kunnen leveren.

“AI-tools hebben er geen begrip van of de code die ze genereren ‘correct’ is.”

Als we ons concentreren op het verhogen van de productiviteit van developers, terwijl we andere obstakels en fricties in het proces negeren, dan vergroten we enkel de frustratie doordat werk zich opstapelt dat niet wordt vrijgegeven. Als de beperking zich aan de bovenstroom bevindt, in het ‘ideation process’ of ‘product definition process’, zien we dat de productiviteit afneemt omdat developers op werk wachten.

Het toepassen van deze tools op een slecht functionerend systeem zal in het beste geval geen winst opleveren, en in het slechtste geval de disfunctie onderstrepen.

Verbeteren van kwaliteit van door AI gegenereerde code

AI-tools hebben er geen begrip van of de code die ze genereren ‘correct’ is. Ze geven slechts de meest waarschijnlijke reactie op basis van de gegeven prompt, wat sterk afhankelijk is van de code waarop ze zijn getraind. Dit kan verouderd en onveilig zijn, wat kan leiden tot fouten. Er moet op de een of andere manier gebruik worden gemaakt van testautomatisering, maar er is een risico dat code van slechte kwaliteit een negatieve invloed heeft op de productiviteit die we verwachten te halen uit deze tools.

Er zullen verschillende technieken moeten worden onderzocht, zoals een mens die de tests schrijft waaraan de door AI gegenereerde code vervolgens moet voldoen, of een mens die de code produceert en de AI die de test, produceert en toepast.

De noodzaak voor menselijke competenties

Ik geloof niet dat het toenemende gebruik van generatieve AI-hulpmiddelen voor codering zal leiden tot een afname van de behoefte aan developers. Ik zie het eerder als een kans voor developers om zich te bevrijden van routinewerk en zich te richten op complexere taken die op hun beurt veel meer waarde kunnen leveren voor bedrijven en eindgebruikers.

De mate van verbetering die dit kan opleveren, hangt af van andere factoren:

  • Efficiënte software delivery-processen die nauwe cross-functionele samenwerking omvatten.
  • Het snel en veilig kunnen vrijgeven van code door efficiënte deployment pipelines om snelle feedback te krijgen.
  • Het vermogen van individuen en teams om samen te werken om complexe problemen op te lossen.
  • De vaardigheden om problemen op een empirische en incrementele manier op te lossen.
  • Hoge mate van teamautonomie en zelforganisatie.
  • Gemakkelijke toegang tot hoogwaardige bedrijfsdata.

Zonder deze verbeteringen zal het toevoegen van AI-hulpmiddelen aan het proces hooguit marginale voordelen opleveren in termen van de hoeveelheid geleverde waarde. Als deze dingen wel geregeld zijn, dan zie ik een kans voor AI-tools om de waarde die een developer team kan leveren aanzienlijk te vergroten. Het gevolg zal zijn dat we meer software-engineers en developers nodig hebben die nieuwsgierigheid, empathie en probleemoplossende vaardigheden kunnen tonen.