Blog

Så förändrar AI och DevOps sättet vi skapar produkter på

SEP 6, 2024

En verklighetscheck från ett projekt jag nyligen var involverad i: När mitt team började arbeta med GE Healthcare på deras senaste patientmonitor visste vi att det skulle ta 3–5 år att utveckla och certifiera produkten.

Marko Klemetti

Chief Technology Officer

Marko is the CTO of Eficode, a European DevOps and Design house. He is also a founder and advisor in many tech startups. Marko is a passionate programmer who believes that design systems and continuous deployment are the enablers of a modern development organization.

Samtidigt rapporterade GitHub att deras AI-verktyg gör utvecklare 55 % snabbare. Det låter ju bra, eller hur?

Problemet är att den faktiska mjukvaruutvecklingen i traditionella organisationer bara står för 5–10 % av den totala tiden för forskning och utveckling. Så även om AI-verktyg gör dina utvecklare dubbelt så snabba förbättrar du bara organisationens totala effektivitet med 2,5–5 %.

Det är inte den banbrytande förbättring vi letar efter.

Jag har ägnat flera år åt att implementera AI-driven utveckling i olika organisationer – från agila startups till hårt reglerade företag. Och jag kan säga att du behöver mer än att bara lägga till AI-kodningsassistenter i din verktygskedja för att uppnå verklig acceleration. Du behöver tänka om kring hela ditt arbetssätt för utveckling.

Vi börjar med sex grundläggande områden som du behöver få rätt innan AI kan göra verklig skillnad. Sedan tittar vi på praktiska sätt att implementera AI-driven utveckling, oavsett om du levererar webbappar flera gånger om dagen eller bygger medicintekniska produkter med certifieringscykler som sträcker sig över flera år.

De sex viktigaste områdena du behöver få rätt

Innan vi går in på AI-driven utveckling ska vi prata om grunderna. Jag har sett alltför många organisationer hoppa direkt till AI-verktyg utan att ha grunderna på plats. Här är vad du behöver få rätt först.

1. Agila arbetssätt – Jira-automatisering

De flesta organisationer använder Jira eller liknande verktyg, och de flesta utvecklare tycker att manuella informationsuppdateringar är tidskrävande. Verktygen är utmärkta för rapportering och ledningsuppföljning, men de kan bli en flaskhals i utvecklingsarbetet.

Modern mjukvaruutveckling behöver ett mer effektivt arbetssätt. I stället för att manuellt uppdatera Jira-ärenden gör moderna verktyg det nu möjligt att smidigt koppla ihop Jira med Git, där branchnamn fungerar som den primära markören i arbetsflödet. När du gör en ändring i applikationen skapar du helt enkelt en branch med ett namn som HW-1234/feature-description, och automatiseringen hämtar informationen från Jira-ärendet därifrån.

Med det här arbetssättet behåller du både spårbarheten och minskar friktionen i utvecklingsprocessen.

2. CI/CD och automatiserade kvalitetsgrindar

Continuous Integration och Continuous Deployment kan verka grundläggande, men utan rigorös automatisering kommer du inte att lyckas i eran av AI-driven utveckling. Din CI/CD-pipeline fungerar som ett skyddsräcke och säkerställer att AI-genererad kod uppfyller dina kvalitetskrav.

Så här kan en grundläggande CI/CD-konfiguration se ut:

name: Continuous Integration

on: [push, pull_request]

jobs: 

test:    runs-on: ubuntu-latest    timeout-minutes: 5    steps:    - uses: actions/checkout@v4    - uses: actions/setup-node@v4    - run: npm ci    - run: npm test    - run: npm run lint

Enkelt? Ja. Men den här grunden gör att du gradvis kan lägga till mer avancerade kontroller, inklusive AI-specifika valideringar.

3. Bygg in kvalitet med kontinuerlig kvalitetssäkring

Dina tester är inte bara verktyg för verifiering. De är levande dokumentation av dina krav. När du arbetar med AI-genererad kod blir detta ännu viktigare. Tester definierar gränserna för acceptabelt beteende, så att dina AI-verktyg har tydliga mål att sikta mot.

I mitt senaste arbete upptäckte vi ett beräkningsfel som vår AI-genererade kod hade introducerat. Vår omfattande testsvit, som också planerades och kördes med hjälp av AI, fångade problemet så att vi snabbt kunde iterera på lösningen.

4. Cloud Native-utveckling som releasar alla ändringar

Cloud Native handlar inte bara om att köra i molnet – det handlar om att använda moderna mönster för driftsättning. Med tjänster som Vercel,Fly.io eller Heroku kan vi nu automatiskt driftsätta varje feature branch och skapa tillfälliga miljöer för testning och validering.

Det här arbetssättet är särskilt värdefullt när du arbetar med AI-genererad kod. Det gör att du snabbt kan verifiera ändringar isolerat utan att behöva hantera komplexa miljöer.

5. Säkerhetsverktyg för automatiserat skydd

Moderna säkerhetsverktyg kan automatiskt skanna dina beroenden, kontrollera sårbarheter och till och med granska pull requests för säkerhetsproblem. Se till exempel GitHub Advanced Security eller GitLab Security.

För AI-driven utveckling blir detta ännu viktigare. Dina säkerhetsverktyg är ditt skyddsnät. De fångar upp potentiella problem i AI-genererad kod innan den når produktion.

6. Organisering enligt Team Topologies

Conways lag säger att din mjukvaruarkitektur speglar din organisationsstruktur.

Team Topologies, ett ramverk utvecklat av Matthew Skelton och Manuel Pais, hjälper oss att organisera team för att stödja moderna utvecklingsmetoder.

Se Matthews introduktion till Team Topologies på vår DevOps Conference: DevOps Topologies 10 years on: What have we learned about silos, collaboration, and flow?

De viktigaste delarna är:

  • Flödesorienterade team som ansvarar för specifika delar av kundvärdet

  • Plattformsteam som tillhandahåller interna tjänster

  • Team för komplexa subsystem som hanterar specialiserade komponenter

  • Stödteam som hjälper andra team att utveckla sin förmåga

Varför är den här strukturen så viktig när du tar i bruk AI-verktyg? Den hjälper dig att tydliggöra var och hur AI-stöd kan användas mest effektivt.

Att ha dessa grunder på plats handlar inte bara om beprövade metoder. Det handlar om att skapa en miljö där AI-verktyg faktiskt kan skapa värde. Utan den här grunden riskerar du att bygga ett korthus som ser imponerande ut men faller samman under verkliga förhållanden. Läs mer i vår artikel ”Transforming software development with AI and DevOps”

Där AI faktiskt hjälper

När grunderna är på plats kan vi titta på var AI kan göra verklig skillnad. Glöm marknadsföringshajpen – här är vad som faktiskt fungerar utifrån min praktiska erfarenhet.

Generera och komplettera kod

Låt mig visa ett verkligt exempel. Nyligen behövde jag implementera en funktion för att beräkna veckonummer. I stället för att själv sätta mig in i detaljerna kring datumhantering lät jag AI hantera algoritmen. 

Så här gick det till:

function getWeekNumber(date = new Date()) {  const startDate = new Date(date.getFullYear(), 0, 1);  const days = Math.floor((date - startDate) / (1000 * 60 * 60 * 24));  const weekNumber = Math.ceil((days + startDate.getDay() + 1) / 7);  return weekNumber;}

Koden fungerar i de flesta fall, men eftersom veckonumret inte beräknas direkt från den första januari fungerar den egentligen inte. Det här lyfter en viktig poäng: AI är bra på att generera första lösningar, men du behöver ordentlig testning och validering.

Den verkliga styrkan ligger inte i att ersätta utvecklare. Den ligger i att hantera de tråkiga och repetitiva delarna så att du kan fokusera på affärslogik och specialfall.

Förstå API:er och bibliotek

Här utmärker sig AI verkligen. I stället för att gräva i dokumentation eller Stack Overflow kan du ställa direkta frågor om API:er och få svar i rätt sammanhang.

När jag till exempel började arbeta med ett nytt bibliotek för datumhantering kunde jag, i stället för att läsa igenom sidor av dokumentation, fråga:

  • Hur hanterar jag ISO-veckonummer i det här biblioteket?

  • Vad är skillnaden mellan lokala veckoberäkningar och veckoberäkningar i UTC?

  • Visa exempel på hur man hanterar fall vid årsskiften

Svaren är oftast mer praktiska och kontextuella än traditionell dokumentation. Men kom ihåg att AI:s kunskapsgräns innebär att du bör kontrollera allt som rör nyliga API-förändringar.

Generera boilerplate-kod

Att starta nya projekt eller lägga till standardmönster brukade innebära att kopiera och klistra in från gamla projekt. Nu kan AI generera den här boilerplate-koden, ofta i ett mer välstrukturerat skick än i dina gamla referensprojekt.

Det intressanta är att AI ofta skapar bättre strukturerad boilerplate-kod än kod som skrivits av människor. Det beror på att den sammanställer beprövade metoder från tusentals exempel.

Se bara till att vara tydlig med dina krav. Skillnaden mellan bra och mediokra resultat handlar ofta om hur väl du specificerar dina behov.

Lära sig ny teknik

Låt mig förklara med ett praktiskt exempel.

Jag behövde lära mig om ljudanalys i Python, ett område jag inte var bekant med. I stället för att lägga timmar på att läsa dokumentation kunde jag ha en dialog med AI:

  1. "Visa mig ett grundläggande flöde för ljudanalys i Python"

  2. "Förklara hur FFT-parametrarna påverkar analysen"

  3. "Hjälp mig att optimera detta för realtidsbearbetning"

Nyckeln är att använda AI för att snabba upp inlärningen, inte som en ersättning för förståelse. Du behöver fortfarande förstå koncepten, men AI kan hjälpa dig att snabbare komma över inlärningströskeln.

Ett varningens ord

Även om alla dessa möjligheter är kraftfulla kommer de med viktiga begränsningar. Låt mig därför avsluta det här avsnittet med de fyra viktigaste:

  • AI-genererad kod behöver testas noggrant

  • Du måste verifiera säkerhetsaspekterna

  • Gränsfall kräver ofta mänsklig insikt

  • De senaste funktionerna eller beprövade metoderna kanske inte återspeglas

Ha alltid detta i åtanke när du implementerar AI

Nu när vi har gått igenom var AI kan hjälpa till, ska vi ta itu med vad du faktiskt behöver se upp med när du tar in AI i din utvecklingsprocess. Jag har stött på de här utmaningarna gång på gång när jag har implementerat AI-driven utveckling, och jag vill hjälpa dig att undvika samma fallgropar.

Kompetens inom prompt engineering är ett måste

Du behöver lära dig en ny färdighet som ingen av oss hade kunnat förutse för några år sedan: prompt engineering. Det handlar inte bara om att be AI skriva kod – det handlar om att få resultat som du faktiskt kan använda i produktion.

Låt mig visa vad jag menar.

När jag behövde den funktionen för att beräkna veckonummer gav frågan ”en funktion för att beräkna veckonummer” bara skräp. Jag var tvungen att lära mig att vara specifik:

”Jag behöver en funktion som tar emot ISO-datum, använder ISO-veckonummerering och ger tydliga felmeddelanden vid ogiltig indata.”

Din förmåga att skriva tydliga promptar blir lika viktig som dina programmeringskunskaper.

Juridisk noggrannhet och immateriella rättigheter

Du har säkert hört talas om stämningen mot GitHub Copilot: I november 2022 lämnades en grupptalan in mot Microsoft, GitHub och OpenAI. I stämningen hävdades att GitHub Copilot kränkte open source-utvecklares upphovsrätt genom att återskapa kod utan korrekt attribuering. Microsoft har lovat att försvara användare mot upphovsrättsanspråk kopplade till AI-genererad kod, men eftersom det juridiska ramverket fortfarande utvecklas behöver du vara klok i hur du använder AI-genererad kod.

Det knepiga är att kod som AI genererar inte automatiskt får upphovsrättsligt skydd. Du behöver ändra den tillräckligt mycket för att den ska bli ditt eget verk. I praktiken betyder det att du inte bara kan kopiera och klistra in AI-genererade svar. Du behöver förstå dem, anpassa dem och integrera dem på rätt sätt i din kodbas.

Säkerhet och dataskydd

Här är något som borde skrämma dig: allt du klistrar in i ChatGPT kan bli träningsdata för framtida versioner.

Dela aldrig, aldrig:

  • API-nycklar eller hemligheter

  • Interna arkitekturdetaljer

  • Proprietära algoritmer

  • Kunddata

  • Säkerhetskänslig kod

Om du behöver använda AI med känslig kod bör du skapa sanerade exempel eller sätta upp privata instanser. Ja, det är mer arbete, men det är bättre än att behöva förklara för säkerhetsteamet varför era interna algoritmer dyker upp i andra personers AI-genererade kodförslag.

Testning och validering

Kommer du ihåg buggen med veckonummer som jag nämnde? AI:n gav mig kod som såg perfekt ut, men som misslyckades för vissa veckodagar beroende på året. Därför behöver du gedigen testning – AI ger dig självsäkert felaktig kod.

Det här är vår testmetod, och den fungerar utmärkt:

  1. Skriv tester innan du genererar kod (ja, TDD fungerar med AI)

  2. Testa edge cases uttryckligen

  3. Validera mot verklig data

  4. Använd CI/CD för att automatisera valideringen

  5. Övervaka beteendet i produktion

Här är ett praktiskt exempel från vårt projekt för veckonummer:

test('ska returnera vecka 13 för den 25 mars 2025', () => {expect(getWeekNumber(new Date('2025-03-25'))).toBe(13);});

Skriv tester som detta innan du ens ber AI om kod. När AI ger dig något som ser bra ut men returnerar vecka 12 i stället för 13, upptäcker du det direkt. Dina tester blir ditt skyddsnät.

Implementeringsstrategi

Så här kommer du i gång: Välj något som inte är verksamhetskritiskt för din första AI-implementering. Kanske en hjälpfunktion eller ett internt verktyg. Sätt upp ordentliga tester, prova några prompts och se vad som fungerar. Se till att teamet känner sig tryggt med processen.

Försök inte ersätta dina utvecklare med AI – det är inte poängen. Du lägger till ett kraftfullt verktyg i deras verktygslåda, men de behöver lära sig att använda det säkert och effektivt.

Mät framgång med DevOps-mått

Låt oss prata om mätvärden. Inte fåfängemått som ser bra ut i presentationer, utan de som faktiskt visar om AI hjälper din utvecklingsprocess.

De fyra mätvärden som spelar roll

När du utvärderar hur din AI-implementering fungerar bör du fokusera på samma fyra mätvärden som du (förhoppningsvis) redan följer. Låt dig inte distraheras av AI-specifika mätvärden som ”rader kod som genererats” – de säger inget användbart.

Här går jag igenom vad du ska mäta och vad jag har sett i praktiken:

Ledtid för förändringar

Detta mäter hur lång tid det tar att få en förändring till produktion. Med AI förväntar du dig att det förbättras, eller hur? Det är dock mer komplicerat än så.

I GE Healthcare-projektet förändrades den totala ledtiden knappt, trots att utvecklarna kunde skriva kod snabbare med AI, på grund av regulatoriska krav.

Men i webbutvecklingsprojekt har jag sett team korta sina ledtider avsevärt när de kombinerar AI med bra automatisering. Du kodar inte bara snabbare – du blir bättre på hela processen från idé till fungerande mjukvara.

Återställningstid

När något går sönder, hur snabbt kan du åtgärda det?

Detta är avgörande med AI-genererad kod eftersom du kommer att stöta på oväntade problem. I exemplet med beräkning av veckonummer som jag visade tidigare hittade och åtgärdade vi buggen snabbt eftersom vi hade bra tester och processer för driftsättning på plats.

Målet bör vara att behålla eller förbättra din återställningstid även när du inför AI. Om den blir sämre går du förmodligen för fort fram.

Driftsättningsfrekvens

Ny forskning visar att 75 % av organisationerna nu driftsätter flera gånger i veckan. Om du driftsätter en gång om dagen ligger du bra till.

Med AI kanske du driftsätter oftare, men tvinga inte fram det – frekvensen bör följa verksamhetens behov.

I mina projekt har jag sett att AI hjälper mest vid små, återkommande förändringar:

  • Åtgärda buggar

  • Lägga till mindre funktioner

  • Uppdatera beroenden.

De stora arkitekturbesluten kräver fortfarande mänskligt tänkande och planering.

Felfrekvens

Det här är något du bör följa noga när du börjar använda AI. Din felfrekvens bör inte öka bara för att du använder AI-genererad kod. Om den gör det behöver du stärka dina valideringsprocesser.

Jag följer produktionsfel noga, särskilt i början av AI-användningen.

Min erfarenhet är att AI-relaterade fel oftast beror på missförstånd av kraven snarare än faktiska kodfel – AI:n skriver syntaktiskt korrekt kod som löser fel problem.

Att sätta ihop alla dessa mätvärden

Så här kan du använda dessa mätvärden i praktiken:

Börja följa dem innan du inför AI. Skaffa ett utgångsvärde. Följ sedan hur de förändras när du introducerar AI-verktyg. Leta efter mönster:

  • Går enkla ändringar igenom snabbare medan komplexa tar lika lång tid?

  • Upptäcker ni fler problem i testning i stället för i produktion?

  • Lägger teamet mindre tid på standardkod och mer tid på arkitektur?

Kommer du ihåg GitHubs stora påstående om 55 % snabbare utveckling? I verkligheten kanske du ser måttliga förbättringar inom vissa områden och inga alls inom andra. Det är helt okej. Målet är en jämn och hållbar förbättring, inte en revolutionerande förändring.

Mätvärdena ljuger inte. Om din ledtid minskar och felfrekvensen inte ökar gör du något rätt. Om båda försämras bör du ta ett steg tillbaka och se över dina processer.

Låt oss avrunda

Efter att ha gått igenom de praktiska aspekterna av AI-driven utveckling med dig vill jag vara tydlig: AI kommer inte att revolutionera mjukvaruutveckling över en natt.

Det jag har lärt mig av att implementera AI i olika organisationer är att den fungerar bäst när du ser den som ännu ett verktyg i din utvecklingsverktygslåda – om än ett kraftfullt sådant.

Det verkliga värdet med AI i mjukvaruutveckling handlar inte om att ersätta utvecklare eller ens om att skriva kod snabbare. Det handlar om att förändra hur vi använder vår tid. I stället för att kämpa med standardkod eller leta igenom API-dokumentation kan du fokusera på de utmanande delarna av mjukvaruutveckling:

  • Att förstå användarnas behov

  • Att utforma robusta arkitekturer

  • Att hantera komplex affärslogik

Kommer du ihåg exemplet jag började med – GE Healthcare-projektet?

Även med alla AI-verktyg i världen kommer du inte att förvandla en treårig utvecklingscykel för medicintekniska produkter till en tremånaderssprint. Men du kan göra de tre åren mer produktiva genom att låta AI hantera rutinuppgifterna medan ditt team fokuserar på de komplexa utmaningar som kräver mänsklig insikt.

Om du funderar på att implementera AI i din utvecklingsprocess, börja med grunderna som jag har beskrivit. *

  • Se till att din CI/CD-pipeline är stabil

  • Se till att din testning är robust

  • Förstå teamets struktur

Inför sedan gradvis AI-verktyg där de passar i just er kontext.

Fortsätt framför allt att mäta de fyra nyckeltalen. De visar om AI faktiskt förbättrar er utvecklingsprocess eller bara ökar komplexiteten.

Framtidens mjukvaruutveckling handlar inte om att AI ersätter utvecklare. Den handlar om att utvecklare som vet hur man använder AI-verktyg effektivt presterar bättre än de som inte gör det. Se till att du tillhör den första gruppen.

Den här bloggen bygger på ett föredrag vid GOTO-konferensen i Köpenhamn 2023. Se Markos föredrag: 

  • DevOps
  • AI
  • Product development
  • Product management

Subscribe to our newsletter