Programmering med AI

Fra kodeforslag til agentiske workflows


Michell Cronberg

Agenda (2 x 60)

  • Del 1: Hvad ændrer sig i udvikling med AI?
  • Del 2: Agent + Skills + MCP i praksis
  • Del 3: Kvalitet, sikkerhed og ansvar
  • Del 4: Demoer og takeaways

Vi kører i et sammenhængende flow og tager pausen fleksibelt, når det passer naturligt i dialogen.

Hvad er AI i denne kontekst?

  • LLM'er forudsiger næste ord ud fra mønstre
  • Trænet på kode, docs og stor mængde tekst
  • Kan generalisere, men ikke "forstå" som mennesker
  • Output er forslag, ikke facit

Det vigtigste i praksis er derfor ikke at få et svar, men at kunne validere svaret hurtigt og systematisk.

Myter og virkelighed

  • "AI erstatter udvikleren" -> Nej, ansvar ligger hos mennesker
  • "AI ved alt" -> Nej, hallucinationer sker
  • "Alle kan kode nu" -> Delvist; vurderingsevne er afgørende
  • "Man skal forstå alt om AI" -> Nej, men man skal kunne styre processen

AI flytter værdien fra ren kodeproduktion til prioritering, arkitektur og kvalitetskontrol.

Fra autocomplete til agenter

  • IntelliSense og snippets -> hurtigere syntaks
  • AI-assistenter -> forslag i kontekst
  • Agenter -> flertrins-opgaver med handlinger
  • MCP -> standardiseret værktøjsadgang

Skiftet handler ikke kun om bedre forslag, men om at gå fra tekst-output til eksekverbare workflows.

Fra søgning til dialog

Før:

  • Fejl -> søgning -> forum -> docs -> trial-and-error

Nu:

  • Beskriv problem -> få hypoteser -> få ændringsforslag -> valider

Skiftet er fra syntaksproduktion til teknisk dømmekraft.

Det er netop derfor erfarne udviklere ofte får størst udbytte af AI-værktøjer.

Tre typer AI-værktøjer

  1. Kodeforslag i editoren
  2. Chatbaseret sparring
  3. Agentbaserede workflows

Den stærkeste effekt kommer typisk af kombinationen.

Brug lagene bevidst: editor til fart, chat til forståelse, agent til gennemførsel.

Konkrete værktøjer (kort overblik)

  • IDE: GitHub Copilot, Cursor, Windsurf, Cline
  • CLI: Gemini CLI, Claude Code, Copilot CLI, Codex CLI
  • No-code/low-code: Lovable, Bolt, n8n

Værktøjsvalg bør altid afspejle jeres domæne, sikkerhedskrav og teamets modenhed.

Agent + Skills + MCP

  • Agent: planlægger og udfører trin
  • Skills: kvalitetsregler og konsistens
  • MCP: adgang til filer, git, browser, data og API'er

Det er denne kombination der gør AI operationelt i praksis.

Når én af de tre mangler, bliver resultatet typisk enten ujævnt, langsomt eller rent forslag i chat.

Eksempel-flow: feature fra issue til PR

  1. Agent læser issue og kodebase
  2. Skill kræver tests og coding standard
  3. MCP bruges til filændringer og testkørsel
  4. Security-skill tjekker input/hemmeligheder
  5. GitHub MCP opretter branch, commit og PR

Det gør processen reproducerbar og lettere at code reviewe på tværs af teamet.

Hvorfor virker det?

  • Reproducerbare arbejdsgange
  • Færre manuelle hop mellem værktøjer
  • Mere ensartet kvalitet på tværs af team
  • Hurtigere feedback-loop

Målet er ikke bare hastighed, men højere kvalitet med lavere varians mellem leverancer.

Hvor det typisk fejler

  • For brede agent-opgaver
  • Ingen klare skills/policies
  • For mange tools uden styring
  • Ingen menneskelig godkendelse før merge

Start småt: få skills, få MCP-integrationer, tydelige mål.

Fejlene er oftest procesfejl frem for modelproblemer.

Konteksthåndtering i praksis

  • Modelvalg betyder mindre end kontekstadgang
  • Store codebases kræver opsummering/genfinding
  • Hukommelse og RAG er ikke det samme
  • God kontekst = færre generiske svar

I praksis betyder kontekstkvalitet ofte mere end valg af selve modelen.

RAG og embeddings

  • RAG forankrer svar i egne data
  • Embeddings muliggør semantisk søgning
  • Nyttigt til docs, runbooks, API-kontrakter, ADR'er

RAG er et værktøj, ikke en erstatning for teknisk vurdering.

RAG virker bedst, når dokumentationen faktisk er opdateret og egnet til genfinding.

Prompts som mini-specs

En stærk prompt beskriver:

  • mål
  • begrænsninger
  • kontekst
  • kvalitetskrav
  • succeskriterier

Vag prompt -> vagt output.

Tænk prompt som en opgavebeskrivelse til en ny kollega på teamet.

Eksempel på bedre prompt

Omarbejd denne service med tydelig DI,
bevar offentligt API,
flyt domænelogik ud af controller,
og tilføj 3 testforslag + risici.

Den type prompt begrænser gætteri og øger sandsynligheden for brugbart førsteudkast.

Kvalitet: AI ændrer ikke fundamentet

  • Tests, analyzers og review er stadig obligatorisk
  • AI kan accelerere både god og dårlig praksis
  • Definér tydelige quality gates i teamet

AI bør integreres i eksisterende kvalitetskæde, ikke stå ved siden af den.

Sikkerhed og ansvar

  • Del aldrig hemmeligheder eller persondata i prompts
  • Kend værktøjernes datahåndtering
  • Definér governance: godkendte tools, review, sporbarhed
  • AI-genereret kode er stadig jeres ansvar

Alt output bør behandles som almindelig kode med samme krav til compliance og sporbarhed.

Lokal udvikling som alternativ

Ved høj dataklassifikation kan lokal drift være relevant:

Lokal drift er især relevant i miljøer med høj dataklassifikation eller stramme regulatoriske krav.

Demo-del

  • Demo 1: Solsystemet (vibe coding)
  • Demo 2: Hukommelsestest (validering/UX)
  • Demo 3: ReactAppAI momsberegner (krav + tests)
  • Demo 4: MCP med Chrome DevTools

Demoerne er valgt for at vise både hurtig prototyping og mere robust, produktionsnær arbejdsgang.

Demo 1: Solsystemet

Fokus:

  • Hurtig prototype fra prompt
  • Iterativ forbedring
  • Balance mellem "wow" og kodekvalitet

Se eksempel: media/sol.html

Denne demo viser hvor hurtigt man kan komme fra idé til noget visuelt, og hvor vigtigt iteration er.

Demo 2: Hukommelsestest (Simon Says)

Fokus:

  • Inputflow, feedback og tilgængelighed
  • Iteration fra basis til bedre UX

Se eksempel: media/hukommelse.html

Her skifter fokus fra "det virker" til "det virker godt for rigtige brugere".

Demo 3: ReactAppAI momsberegner

Reference:
ReactAppAI

Krav:

  • Før/efter moms
  • Satser 12.5% og 25%
  • Alle felter valideres
  • Tests for logik + brugerflow

Det her er en lille men realistisk feature med tydelige krav, kanttilfælde og testbehov.

Prompt: momsberegner (god version)

Byg en simpel momsberegner i React + TypeScript.
Understøt før->efter og efter->før moms.
Satser: 12.5% og 25%.
Valider input: påkrævet felt, kun tal, max 2 decimaler,
ingen negative tal, max 10.000.000.
Deaktivér Beregn når input er ugyldigt.
Vis fejlbeskeder på dansk.
Vis resultat og momsbeløb med 2 decimaler.
Skriv enhedstests for validering/beregning og komponenttests for centrale flows.
Svar med: 1) plan, 2) implementering, 3) testoversigt, 4) kendte begrænsninger.

Prompten er bevidst skarp for at få stabilt output med mindre behov for efterfølgende reparation.

Demo 4: MCP med Chrome DevTools

Case:

  • Hent serialdate
  • Få UI-overblik
  • Kør funktionel test
  • Lav Lighthouse-rapport

Pointen: fra chat-svar til agentisk handling i et rigtigt system.

Denne demo kobler teori og praksis ved at vise, at agenten kan arbejde direkte i et kørende miljø.

Hvad tager vi med?

  • AI i udvikling handler om workflow-design
  • Agent + Skills + MCP giver størst effekt
  • Kvalitet, sikkerhed og ansvar er ikke valgfrit
  • Start småt, mål effekt, skalér gradvist

Hvis I tager én ting med: design workflows først, vælg værktøjer bagefter.

Q&A

Tak for i dag.

Slides (HTML):
https://mcronberg.github.io/aiartikler/programmeringmedai.marp.html