Spec-Driven Development in der Praxis – vom Prompt zum Prozess (Fabian Meyer)
Ep. 03

Spec-Driven Development in der Praxis – vom Prompt zum Prozess (Fabian Meyer)

Episode description

KI-Tools sind beeindruckend – aber im Unternehmenskontext war Code schreiben nie der Flaschenhals. Die Reibung steckt im Prozess: Tickets in Entwicklungs­pläne überführen, Tests schreiben und ausführen, Analysetools einbinden, deployen, Fehler debuggen. Bei eventim wurde der KI-gestützte Workflow wie ein neuer Entwickler eingearbeitet: mit Zugriff auf GitLab und Jira, mit Workflows als wiederverwendbare Skills und mit klaren Standards – vom Ticket bis zum verifizierten Ergebnis. Entwickler reviewen Ergebnisse, statt einzelne Schritte auszuführen. Fabian Meyer, Chapter Lead bei eventim Tech, zeigt den Weg vom rudimentären Einsatz von ChatGPT zu einem eigenen Spec-Driven-Development-Workflow: Welche Hürden gab es, was hat funktioniert – und was würde das Team heute anders machen?

Aufgezeichnet am 23.06.2026 bei der Online-Konferenz »Coding mit KI«, ein Rheinwerk Spotlight.

Themen des Vortrags

  • Warum reines »KI schreibt Code« im Enterprise-Alltag wenig Impact hat
  • Spec → Code → Verify: die drei Phasen im Detail
  • Skills vs. MCP: welches Werkzeug für welchen Zweck
  • Agent wie einen neuen Kollegen einarbeiten – inklusive Jira-, GitLab- und Deploy-Zugang
  • TDD im Red-Green-Loop als Verifikationsanker für den Agenten
  • Quality Gates: lokales Linting, Self-Review und automatisches Code-Review durch frische Sessions
  • DevTest mit Playwright: der Agent klickt sich selbst durch das Feature
  • Lessons Learned: weniger ist mehr, klare Coding-Guidelines, saubere Architektur als Voraussetzung
  • Auswirkungen auf die Zusammenarbeit mit Produktmanagement, QA, UX und Security

Über den Speaker

Fabian Meyer ist Chapter Lead und Software Engineer bei eventim Tech. Er leitet das Vue Chapter, entwickelt Frontend-Engineers weiter und treibt technische Exzellenz über Teams hinweg voran. Als technischer Lead verantwortet er den eventim.Tixx-Onlineshop - eine skalierbare Ticketing-Plattform für über 100 Kunden aus Sport und Festivals. Sein Fokus liegt auf Spec-Driven Development und wie Teams in großen Unternehmen diese Technologie in ihre Entwicklungs­prozesse integrieren können.

Links

Credits

Du hast Lust, noch mehr Neues zu lernen? In unseren Newslettern versorgen wir dich regelmäßig mit nützlichen Inhalten aus unseren Büchern und Wissensbeiträgen unserer Expert*innen. Aber natürlich auch mit Informationen rund um Neuerscheinungen, Buchempfehlungen, Rabatt-Aktionen, Events und vielem mehr. Melde dich jetzt an!

Download transcript (.vtt)
0:00

Aber trotzdem war der Impact bei uns eigentlich eher gering,

0:04

weil Coding war bei uns eigentlich auch nie so richtig der Flaschenhals.

0:07

Es gibt halt noch sehr, sehr viel, was wir drumherum haben, was uns dann eher

0:12

langsamer gemacht hat, als den eigentlichen Code zu schreiben.

0:20

KI kann Code schreiben, das wissen wir alle. Aber wer im echten Entwicklungsteam

0:24

arbeitet, der weiß auch, Codeschreiben war nie das Problem.

0:28

Die Reibung steckt drumherum. Tickets verstehen, Tests schreiben,

0:32

Tools einbinden, deployen, debuggen und dabei auch noch reviewbare Ergebnisse

0:36

produzieren, das ist eine Herausforderung.

0:39

Unser nächster Speaker, das ist Fabian Mayer. Er ist Chapter Lead und Software

0:44

Engineer bei Eventim Tech.

0:46

Er leitet das Vue Chapter, entwickelt Frontend-Engineers weiter und treibt

0:50

technische Exzellenz voran.

0:52

Als technischer Lead verantwortet er den Event im TIX Online-Shop,

0:56

eine Ticketing-Plattform für über 100 Kunden aus Sport und Festivals. Kennen wir alle.

1:01

Er und sein Team haben ihre KI-Tools wie neue Entwickler eingearbeitet.

1:05

Mit Zugang zu GitLab und Jira, mit wiederverwendbaren Skills,

1:09

mit klaren Standards, vom Ticket bis zum fertigen Feature.

1:13

Wie das genau funktioniert, das wird er uns jetzt erzählen und ich freue mich

1:16

sehr darauf, dass er heute hier ist. Hallo, herzlich willkommen Fabian.

1:20

Ja, erstmal ein herzliches Moin aus Bremen.

1:25

Ja, ich freue mich sehr, den Vortrag heute zu machen. Spec-Driven Development in der Praxis.

1:31

Und ja, bin gespannt auf das Feedback und auch auf die Fragen am Ende.

1:36

Und ja, freue mich heute hier zu sein. Ja, super, klasse. Dann würde ich sagen,

1:40

fang einfach gleich mal an.

1:42

Und genau, wenn ihr Fragen habt, schreibt sie in den Chat. Und am Ende spreche

1:46

ich gerne mit dem Fabian noch einmal darüber. Bis gleich.

1:50

Ja, Spec-Driven Development in der Praxis. Heute soll es so ein bisschen darum

1:54

gehen, wie wir Spec-Driven Development bei Eventim leben.

2:00

Noch ein kleiner Klick auf den richtigen Bildschirm, dann kann es auch losgehen. Ja, Who am I?

2:06

Hendrik hat hier schon eine gute Einleitung gegeben, die hier schon einiges vorwegnimmt.

2:11

Und ja, das Thema des Talks lässt natürlich auch durchblicken.

2:15

Es ist eine gewisse Leidenschaft für Agentic Engineering und auch alle anderen

2:20

KI-Themen dabei und privat auch immer einige Projekte.

2:26

Ich bin Sportfan, ich mache sehr viel mit 3D-Druck und habe auch einen Homeserver

2:32

zu Hause stehen, wo ich immer viele Projekte drauf mache. Da läuft unter anderem

2:37

auch zum Beispiel ein Hermes-Agent.

2:39

Wer das Ganze kennt, wer sich dafür interessiert, da kann ich auch gerne Fragen

2:43

zu beantworten, wie gut sowas funktioniert und wo einem das auch was bringt.

2:49

Genau, Eventim und Tix. Eventim ist Europas führender Ticketing-Anbieter und

2:54

ich arbeite bei unserem Produkt Eventim Tix. Das ist unsere,

2:59

wie schon gesagt, Ticketing-Plattform für Sport und Festivals, über 200 Kunden sogar.

3:04

Da habe ich wohl einen kleinen Typo vorher gehabt.

3:07

Ja, wir arbeiten hauptsächlich mit PHP, haben mehrere Vue-Frontends,

3:10

wir haben auch so einen kleinen Legacy-Core und arbeiten mit fünf Teams zusammen auf einem großen GitLab,

3:19

und entwickeln da unsere Plattform weiter.

3:22

Große Kunden von uns, zum Beispiel fast jeder Verein in der Bundesliga ist tatsächlich

3:27

bei uns, dass man das nicht so sehr sieht, ist Teil des Designs.

3:31

Große Festivals, Rock am Ring, Rock am Park, Hurricane werden sicherlich einige

3:36

kennen. Das ist so der Stack und die Kunden, mit denen wir arbeiten.

3:41

Darum soll es heute allerdings nicht gehen, sondern um erstmal so einen Schritt

3:46

zurück zu gehen, bevor wir jetzt in Spec-Driven Development einsteigen.

3:51

Wie haben wir bei Eventim überhaupt mit KI angefangen?

3:56

Ja, der Start war wahrscheinlich wie bei den meisten, ich nenne es hier die Chat-GPT-Ära,

4:03

nach einigen Gesprächen mit unserer Datenschutz- und IT-Security-Abteilung haben

4:08

wir es dann geschafft für uns,

4:10

Chat-GPT-Enterprise zu bekommen, das haben wir dann auch,

4:14

über unsere komplette Firma direkt ausrollen können und am Anfang war das Ganze,

4:19

sage ich mal, für uns so ein Ersatz oder so ein Begleiter, den wir

4:23

so, wofür wir sonst, sage ich mal, Stack Overflow und Google genutzt haben,

4:27

ich habe hier ein Problem, ich habe da ein Problem, hat das schon mal jemand anderes gehabt,

4:32

dafür haben wir dann hauptsächlich ChatGPT genutzt, auch hin und wieder hat

4:37

man mal ein bisschen Code gemacht, man kopiert ein bisschen Code rein,

4:40

kopiert ein bisschen Code raus, aber hat da noch sehr, sage ich mal,

4:43

den Nachteil, dass man das dann selbst am Ende alles,

4:46

zusammenwurschteln muss, sage ich jetzt mal,

4:49

Und das war natürlich nicht sonderlich produktiv und hat bei uns in der Firma

4:55

jetzt auch nicht den riesigen Impact gehabt, sage ich mal.

4:59

Dann dazwischen, ich gehe nur ganz, ganz kurz drauf ein, war Copilot bei uns.

5:04

Das war dann so ein bisschen autocomplete auf Steroiden.

5:07

Das war allerdings nur ein sehr kurzer Akt bei uns. Wir hatten einmal 200 Lizenzen

5:13

geholt, aber auch da war die Adoption unter den Entwicklern nicht sonderlich groß.

5:19

Und dann kam, sage ich mal, der nächste große Schritt, Codex von ChatGPT und Claude Code.

5:24

Da hatten wir dann das erste Mal Tools, die wirklich in die Code-Basis gehen

5:28

konnten, sich in den richtigen Kontext sammeln konnten, okay,

5:32

was passiert hier überhaupt?

5:33

Dann haben wir so ein bisschen angefangen rumzuspielen, okay,

5:37

es gibt irgendwie einen Planmodus, da kann man sich dann schon mal so ein bisschen,

5:41

drauf vorbereiten, okay, was für eine Änderung möchte ich jetzt überhaupt machen?

5:45

Und dann läuft Claude oder Codex halt los und implementiert das Ganze und da

5:50

wird das Coding dann schon deutlich, deutlich schneller,

5:53

und da haben wir dann hier und da mal einen Bug gefixt, kleinere Features gebaut,

5:57

Refactorings, aber auch noch sehr, sehr im kleinen Rahmen,

6:01

und natürlich auch einiges an Dokumentation geschrieben, wo wir vorher teilweise

6:06

einfach ein bisschen zu faul für waren, kann man auch ganz ehrlich sein und

6:10

das haben wir inzwischen über unsere komplette Firma ausgerollt.

6:14

Jedenfalls bei uns in der Tech. Und ja, aber den großen Big Bang hatten wir da noch nicht.

6:22

Es gibt ja auch zum Beispiel eine Metastudie, die sagt, am Anfang sind erfahrene

6:27

Entwickler, also Senior und drüber, am Anfang 19% langsamer mit KI,

6:33

denken aber tatsächlich selber, dass sie 20% schneller sind.

6:37

Allerdings, wenn man sich einmal so richtig eingearbeitet hat,

6:40

ist man dann wirklich diese 20% schneller, die man sich auch vorstellt.

6:43

Natürlich gibt es viel, sage ich mal, auf LinkedIn und so. Der 10x Engineer,

6:47

das stimmt natürlich nicht so 100%, aber man kann da schon, sage ich mal,

6:52

merken, dass man doch deutlich schneller ist.

6:55

Aber trotzdem war der Impact bei uns...

6:59

Eigentlich eher gering, weil Coding war bei uns eigentlich auch nie so richtig

7:03

der Flaschenhals. Es gibt halt noch sehr, sehr viel, was wir drumherum haben,

7:08

was uns dann eher langsamer gemacht hat, als den eigentlichen Code zu schreiben.

7:13

Und nochmal so ein paar Zahlen. Wir haben das über circa 350 aktive Nutzer ausgerollt.

7:19

Wir nutzen hauptsächlich Claude Code und beziehen die Inference über AWS Bedrock,

7:25

sodass das Ganze dann zwar amerikanische Modelle, aber in Deutschland gehostet

7:29

und dadurch können wir halt auch,

7:31

Anmeldungen mit Microsoft und solche Sachen machen in einer großen Firma.

7:35

Ganz wichtig und auch wenn Tokens, sage ich mal, nicht die beste Metrik ist,

7:39

damit man so ein bisschen Eindruck bekommt, wie weit das bei uns schon verbreitet ist.

7:43

Bei uns verbrauchen wir derzeit circa so 3,7 Millionen Tokens am Tag mit diesen 350 Nutzern.

7:52

Genau. Der Agent schreibt den Code, aber ich mache immer noch, oder du, alles andere.

7:58

Ich muss immer noch in Jira reingehen und mir das Ticket anschauen.

8:02

Okay, wie detailliert ist das Ganze jetzt?

8:04

Ich muss mir im Kopf irgendwie einen Plan machen. Okay, ich möchte jetzt Feature X bauen.

8:08

Da muss ich in das und das Repository rein und dann muss ich mir im Kopf so

8:12

einen Plan machen, okay, wie gehe ich das Ganze an?

8:16

Okay, dann mache ich so ein bisschen einen Plan und lasse Claude das Ganze umsetzen

8:21

und teste das Ergebnis am Ende erstmal selber.

8:25

So, der nächste Schritt ist dann, einen Merge-Request zu erstellen und Reviewer zuweisen.

8:30

Da fangen die Probleme, sage ich mal, ein bisschen an. Ich kriege ein Code-Review,

8:33

12 Open Threads, oh Gott.

8:36

Und dann muss ich ein bisschen Babysitting in der Pipeline machen,

8:38

vielleicht fehlt ein Linter, Code-Style, Unit-Test.

8:41

Wir haben eine sehr große Pipeline in unserem Merge-Request,

8:45

um ganz, ganz viele Checks durchzuführen und da merke ich dann so langsam,

8:48

da hat es an einigen Stellen schon irgendwie ein bisschen gehapert und das Ergebnis

8:52

war dann vielleicht doch nicht ganz so, wie ich mir das erhofft hatte.

8:55

Dann muss ich am Ende noch deployen für unsere QA, dann schlägt vielleicht noch

9:00

einer der automatisierten End-to-End-Tests fehl und am Ende habe ich da,

9:03

sage ich mal, einen ganzen Haufen roter Pipelines, die ich am Ende jetzt trotzdem selber fixen muss.

9:08

Also, ich habe den Code zwar super schnell erstellt, vielleicht in nur ein paar

9:13

Minuten, aber am Ende muss ich dann trotzdem Stunden investieren,

9:17

um das Ganze dann wieder so ein bisschen aufzuarbeiten.

9:20

Das ist jetzt natürlich auch ein bisschen ins Extreme gezogen,

9:23

aber ich glaube, ihr versteht, worauf ich hinaus will.

9:27

Und so viel mehr kommt da noch dazu. Ups, da habe ich ein bisschen geschrumpft.

9:29

Genau. Das Codeschreiben war nie so wirklich der Flaschenhals, zumindest bei uns.

9:34

In Enterprise ist es eher der Prozess rund um den Code, wo man dann wirklich

9:37

stecken bleibt und wo man dann noch ganz viel Einzelarbeit dazu machen muss.

9:43

Genau, der Code wird schnell generiert, durch den Prozess kommen wir immer noch

9:46

langsam. Dann war mein erster Gedanke, hm, dann werfen wir den Prozess halt weg, oder?

9:51

Nee, das geht natürlich nicht und das wollen wir auch nicht,

9:53

weil dieser Prozess ist über Jahre entstanden und es hat auch seine Gründe,

9:57

warum wir da verschiedene Gates drin haben, warum wir Code Reviews machen, warum wir QA machen.

10:04

Das ist dann sozusagen bei uns immer der Human in the Loop,

10:07

also, dass wir halt beim Code Review und QA gucken, wir, okay,

10:10

werden unsere Standards, Guardrails eingehalten,

10:13

ist das Ganze sicher, können wir das jetzt so auf unser Produktionssystem deployen,

10:17

ohne dass wir Security-Issues bekommen.

10:20

Wir haben auch eine komplexe Infrastruktur. Wir haben sehr viele verschiedene

10:24

Repos, die zusammen mit vielen Applikationen eine Plattform bilden.

10:29

Und wir haben auch viele etablierte Prozesse in Jira, in GitLab,

10:33

wie wir Merge Requests erstellen und alles.

10:35

Das soll halt erstmal weiterhin so bleiben. Wir wollen Teilautomatisierung,

10:40

sage ich jetzt mal, weil wir den Human in the Loop ja behalten wollen,

10:44

aber wie kommen wir dahin, dass wir nicht nur den Code generieren,

10:47

sondern wirklich den Software Development Lifecycle so ein Stück weit automatisieren,

10:53

dass wir halt da nochmal ordentlich an Geschwindigkeit gewinnen.

10:59

So, jetzt erstmal ein kleiner Überblick, was ist Spec-Driven Development?

11:03

Ist es nur ein Buzzword? Jein.

11:09

So ein bisschen ist es ein Buzzword, weil es am Ende eigentlich gar nicht so

11:12

kompliziert ist, aber trotzdem halt in der Entwicklung wirklich sehr, sehr helfen kann.

11:18

Im Grunde teilt sich das Ganze immer in drei Schritte auf.

11:23

Spec Code Verify, das ist auch der Name von dem Workshop, der morgen stattfindet,

11:28

deswegen dachte ich, benutze ich das nochmal, weil es einfach so perfekt passt.

11:31

Also wir starten quasi ähnlich wie beim Plan Mode, nur bei Spec Driven Development

11:36

nennt man es dann Spec oder Spezifikation.

11:39

Der eine mag jetzt vielleicht so ein bisschen an Wasserfallmodell oder Pflichten-Lastenheft

11:43

denken, aber glaub mir, es ist ein bisschen anders.

11:46

Es läuft dann am Anfang so ab, dass ich einen detaillierten Plan,

11:49

wie ich Feature X in CodeBase X implementieren will, zusammen mit meinem Agenten,

11:55

ob das jetzt Claude Code ist oder Codex, ist am Ende eigentlich egal.

12:00

Was allerdings noch wichtig ist, dieser Plan wird am Ende, die ganzen Entscheidungen,

12:06

die da drin sind, die werden von mir getroffen.

12:09

Der Agent stellt mir nur die Fragen, um das Ganze halt zu machen.

12:13

Im nächsten Schritt lassen wir den Agenten das Ganze dann in einer neuen Session,

12:17

da gehe ich gleich nochmal drauf ein, implementieren und das Ganze basiert dann auf der Spec.

12:22

Und der letzte Schritt, wahrscheinlich auch mit Abstand der schwerste,

12:26

verify, dass wir den Agenten den Code gegen mehrere Quality Gates verifizieren lassen.

12:32

Quality Gates ist jetzt allgemein, das kann Code Review sein,

12:35

Linting, Unit Test, so viel wie möglich, sage ich mal, um am Ende sicher gehen

12:40

zu können, dass der Code, der da rauskommt, gut ist von der Qualität her und auch funktioniert.

12:47

Warum das Ganze überhaupt? Warum machen wir überhaupt Spec-Driven Development?

12:51

Was ist, sage ich mal, der Grund, dass das besser funktioniert,

12:55

als einfach, ich prompte ein Prompt nach dem anderen, bis es funktioniert?

13:00

Das kleine Bild, was ich euch hier eingeblendet habe, wenn ihr Claude Code nutzt,

13:03

könnt ihr euch das auch anzeigen lassen mit Slash-Context.

13:06

Das ist der Kontext. Jedes KI-Modell hat ein gewisses Kontext-Window,

13:13

wo X-Tokens reinpassen.

13:15

Bei den Claude-Modellen ist es normalerweise 200.000 Tokens oder eine Million

13:20

Tokens, wenn man das Größere wählt.

13:23

Ich glaube, bei Codex sind es 276.000 oder sowas.

13:27

Und das Ganze ist so, je voller dieser Kontext ist, desto schlechter ist die

13:31

Qualität vom Output des LLMs.

13:34

Das kommt einfach dadurch, das ist so ein bisschen wie beim Menschen,

13:37

wenn ich acht Stunden gearbeitet habe und dann in der letzten halben Stunde

13:40

versuche nochmal ein Code Review zu machen,

13:43

dann ist mein Kopf von dem ganzen Tag schon so voll mit Informationen,

13:46

dass dieses Code Review wahrscheinlich am Ende nicht das Beste ist.

13:50

Und mit dem Agenten ist es ganz ähnlich. Solange der Kontext noch leer ist,

13:54

da ist es 7 Uhr morgens, zwei Kaffee getrunken, man ist total dabei und kann

14:01

jedes Detail verstehen und noch ganz viel Informationen aufnehmen.

14:04

Sobald der Tag zu Ende ist oder der Nachmittag kommt, ist es dann schon ein bisschen schwieriger.

14:09

Und Spec-Driven Development gibt uns halt die Möglichkeit, durch dieses Spec

14:14

quasi eine neue Unterhaltung mit dem Agenten zu starten, wo er dann eine Datei

14:19

hat, wo eigentlich schon alle Infos drinstehen, die er am Ende wissen muss.

14:24

Und die Qualität dieses Plans oder dieser Spec ist auch sehr stark verbunden

14:29

mit der Qualität des Codes, der am Ende dabei rauskommt.

14:34

Es gibt verschiedene,

14:37

Spec-Driven Development Frameworks da draußen. Ich habe jetzt hier mal so ein

14:41

paar aufgelistet. OpenSpec, BMAD, PlanAct, SpecKit von GitHub.

14:46

Die haben alle verschiedene Schritte, die meist durch Skills implementiert werden.

14:52

Aber wenn man sich so ein bisschen die Namen des Ganzen durchliest,

14:56

Discover, Specify, Validate, dann haben wir Brainstorm, Architect,

15:02

Plan, Reflect, Spec, Test, Ship.

15:07

Was fällt dabei auf? Am Ende ist es eigentlich immer derselbe Vorgang.

15:11

Wir haben irgendeine Spezifikation oder Plan, der dabei rauskommt.

15:15

Der Agent implementiert das Ganze und am Ende versuchen wir zu reflektieren,

15:20

zu verifizieren, zu validieren.

15:23

Da kann man dann, kann man am Ende nennen, wie man will, aber im Grunde sind

15:26

es immer diese drei Schritte, die das Ganze durchläuft.

15:31

Genau. Da kann man noch mehrere Schritte dazwischen packen.

15:35

Das ist so ein bisschen dann auch nach Gusto. Genau. Für uns waren die ein guter Startpunkt.

15:42

Wir haben einige davon ausprobiert, haben auch hin und wieder mal was angepasst.

15:47

Und das ist, glaube ich, auch ein ganz wichtiger Schritt, den ich jedem ans Herz legen würde.

15:52

Guckt euch die Sachen mal an, geht auch wirklich rein in die Skills, die da drinstehen.

15:57

Am Ende sind das alles nur Textdateien, sage ich mal. Da steckt wirklich keine

16:02

Magie drin und man braucht auch keine Angst zu haben, da hin und wieder mal

16:05

was zu verändern, um sich an seinen eigenen Workflow anzupassen.

16:11

Für uns passte aber nichts davon so richtig.

16:15

Viele Frameworks haben irgendwie schon eingebaut, dass sie so ein bisschen von

16:18

einem Workflow in GitHub ausgehen.

16:21

Das hatten wir allerdings nicht. Wir nutzen GitLab und Jira für unsere Tickets.

16:26

Viele gehen auf das Thema Deploy gar nicht ein oder haben ein sehr einfaches

16:31

Deploy da drin. Wir hingegen hatten eine sehr komplexe Multi-App-Infrastruktur,

16:36

die wir halt auch irgendwo hin deployen müssen.

16:40

Oft sind die konzipiert für die Arbeit in einem einzelnen Repository,

16:44

aber wie es in vielen größeren Firmen so ist, hat man eine ganze Armada von

16:49

Repositories, die mit unterschiedlichen Beziehungen zueinander sind.

16:52

Das eine ist eine Library für was anderes, die sind über eine API verbunden,

16:56

die kommunizieren Event-Driven.

16:59

Diese ganzen Infos, sage ich mal, muss man auch noch irgendwie mit einbinden,

17:05

damit das Ganze gut funktioniert.

17:08

Und sie setzen meistens auch einen relativ flexiblen Prozess insgesamt in der

17:12

Softwareentwicklung voraus, während wir halt, ich möchte nicht sagen starr,

17:16

aber einen etablierten Enterprise-Prozess halt haben, den wir in unserem Team

17:19

halt auch entwickelt haben.

17:22

Und wir wollten diesen Prozess nicht aufgeben, sondern wollten ihn teilautomatisieren

17:27

und haben uns am Ende dann dafür

17:29

entschieden, dass wir unser eigenes Spec-Driven-Development-Framework

17:33

bauen wollen, damit wir auch verstehen, womit wir arbeiten.

17:36

Das ist uns persönlich immer ganz wichtig. Wir nutzen auch im Code selten Frameworks,

17:41

die, sage ich mal, viel Magic in Anführungszeichen haben.

17:44

Wir wollen immer bis zum, sage ich mal, letzten Punkt alles verstehen und dachten

17:50

dann, okay, wir bauen jetzt unser eigenes, dann verstehen wir,

17:53

womit wir arbeiten und haben etwas, was genau auf uns zugeschnitten ist.

17:58

Ja, und Henrik hat es ja am Anfang schon so ein bisschen eingeleitet.

18:02

Wir haben uns dann echt mal gefragt, welche Infos braucht unser Agent,

18:05

um produktiv zu sein und haben da so einige Parallelen zur generellen Einarbeitung

18:10

von Entwicklern bei uns gesehen.

18:12

Der Agent braucht erstmal den Zugang zu Jira. Er muss irgendwie Tickets lesen

18:16

können, er muss hier und da auch mal einen Kommentar machen können,

18:19

Tickets verschieben von Open zu In-Development und zu Ready-for-Review.

18:24

Er braucht Zugang zu unserem GitLab, muss Branches erstellen können,

18:27

Merge-Requests aufmachen, Pipelines ansehen, Code-Review machen.

18:31

Er muss unsere komplexen Multi-App-Deployments ausführen können.

18:35

Er braucht auch ein Pipeline-Monitoring, sodass er auch eine Merge-Request,

18:39

die er erstellt hat, sich anschauen kann, auf Fehler entsprechend reagieren kann.

18:43

Und er sollte am Ende, so wie wir das auch machen, Dokumentation schreiben und

18:47

zwar genau so, wie wir das machen.

18:50

Und am Ende, was sonst vielleicht der nette Kollege ist, der einem zur Einarbeitung

18:54

zugewiesen ist, ist hier dann der Human in the Loop, was so ein bisschen das

18:57

Pairing repräsentiert.

18:59

Das brauchen wir alles und das klingt am Ende schon sehr stark danach,

19:03

als wir bauen, wir arbeiten einen neuen Kollegen ein. Und im Grunde ist es auch,

19:08

sehr nah da dran. Nur nutzen wir da ein wenig andere Tools für.

19:14

Es gibt da zwei große Sachen, die man dafür nutzen kann, Agent-Skills und MCP.

19:20

Skills sind, sage ich mal, der Low-Effort-Way, das ist eigentlich relativ easy,

19:24

das sind am Ende einfach Markdown-Dateien mit Anweisungen.

19:27

Deswegen habe ich auch gesagt, bei den Spec-Driven-Development-Frameworks,

19:30

die man da draußen findet, einfach mal reingucken.

19:33

Am Ende ist das alles nur, sage ich mal, Prompts in Text-Dateien oder in Markdown-Dateien

19:38

in dem Fall. Das ist halt super, um Teamworkflows und Prozesse abzubilden.

19:43

Die sind auch sehr leicht zu reviewen, weil es am Ende halt einfach nur Text ist.

19:46

MCP ist dann schon ein leicht höheres Investment. Das würde ich empfehlen,

19:51

wenn die Tool-Anbindung so ein bisschen komplizierter ist.

19:55

Zum Beispiel GitHub bietet einen guten MCP GitLab auch.

19:59

Da ist es nur wichtig, darauf zu achten, je mehr Tools so ein MCP hat,

20:04

desto voller wird der Kontext halt automatisch.

20:09

Wir nutzen tatsächlich beides. Wir benutzen hauptsächlich Skills für große Teile

20:13

unseres Prozesses und auch für einige Tools.

20:16

Man kann Skills auch sehr gut benutzen, um gewisse CLI-Tools,

20:19

bei GitLab zum Beispiel G-Lab, es gibt auch für Jira einige CLI-Tools,

20:24

da sieht dieser Skill dann so aus, dass er so ein bisschen erklärt,

20:26

wie ist das Ganze zu benutzen und MCP dann entsprechend für komplexere Anbindungen,

20:32

wie zum Beispiel Logs aus Grafana auslesen.

20:36

Genau, dann haben wir uns noch Gedanken gemacht, okay, wie können wir jetzt

20:39

unseren Prozess abbilden? Wie lesen wir die Jira-Tickets? Welche Details stehen

20:44

da drin? Wie refined sind unsere Tickets eigentlich?

20:47

Wie dokumentieren wir genau? Welche Guidelines und Guardrails haben wir?

20:51

Welche Commands muss der Agent auch ausführen können, wo er möglichst dann nicht

20:55

uns nochmal fragen muss, ob wir das Ganze machen und er muss irgendwie unser

20:59

gesamtes Developer-Setup bedienen können.

21:02

Da ist es auch wichtig, lokale Ausführungen zu bevorzugen, weil dann kann der

21:05

Agent einfach schneller iterieren auf dem Ganzen, als wenn er jetzt jedes Mal,

21:10

sage ich mal, zu GitLab gehen muss und gucken muss, wie die Pipeline aussieht.

21:15

So, unser SDD-Framework. Das ist, wie ihr schon vorher wahrscheinlich vermutet

21:20

habt, gibt es da drei Phasen, die sich in mehrere Skills aufteilen und das sieht dann konkret so aus.

21:27

In unserem Spec-Skill holen wir das Jira-Ticket, recherchieren,

21:31

in der Code-Basis, das kann ein oder mehrere Repositories sein,

21:35

dann spezifizieren wir gemeinsam und das ist tatsächlich auch ein relativ langer

21:40

Teil, also es ist dann nicht so, dass man zwei, drei Fragen beantwortet,

21:43

sondern das kann bei einem komplexen Feature auch mal so sein,

21:46

dass da so 70 Fragen rauskommen.

21:48

Das ist kein Scherz, das dauert dann wirklich ein bisschen, da muss man sich

21:51

hinsetzen, so wie früher, wenn man sich, sage ich mal, mit dem ganzen Team vielleicht

21:54

überlegt hat, okay, wie wollen wir dieses große neue Feature,

21:58

umsetzen, setzt man sich jetzt mit seinem Claude Code oder seinem Codex hin und,

22:04

versucht gemeinsam halt ein Shared Understanding zu bekommen,

22:07

wie das Ganze jetzt am Ende aussehen soll.

22:09

Und der Output davon ist dann die strukturierte Spec als Kontext-Artefakt.

22:14

Als nächstes kommt dann der Codeschritt. Da machen wir eine neue Session auf,

22:18

um den Kontext zu schonen.

22:21

Wir arbeiten da ausschließlich nach TDD. Da gehe ich gleich nochmal drauf ein,

22:25

warum das für die Agents sehr hilfreich ist. Wir nutzen Conventional Commits.

22:29

Wir lassen den Agenten auch direkt auf unser GitLab pushen.

22:33

Natürlich nicht auf den Main, sondern auf seinen Feature-Branch dann.

22:36

Und der Agent arbeitet dann im SDD-Framework autonom, bis alle Tasks erledigt sind.

22:42

Und am Ende steht dann der Verify-Step. Wir gleichen ab mit der Spec,

22:46

die wir vorher geschrieben haben. Haben wir jetzt wirklich das implementiert,

22:49

was wir auch implementieren wollten?

22:51

Lassen lokale Checks oder auch Remote-Checks durchlaufen, je nachdem,

22:54

wie das Ganze aufgestellt ist.

22:56

Wir lassen dann Code-Review wieder durch einen frischen Agenten oder eine frische

22:59

Session durchführen, damit das Ganze auch nicht beeinflusst ist von dem Ganzen,

23:03

was er da vorgemacht hat.

23:05

Und der letzte Schritt, der auch nochmal sehr viel bringt, aber auch der komplizierteste

23:09

teilweise umzusetzen ist,

23:11

er nutzt Playwright, um wirklich auf unsere Development-Maschinen zu gehen,

23:14

wo das Feature dann deployed ist und das dann wirklich so zu testen,

23:18

wir nennen es bei uns mal DevTest, ich gehe auf die Maschine und mache den Idiotentest,

23:22

funktioniert das Ganze überhaupt, was ich hier gebaut habe,

23:25

das macht Claude dann auch entsprechend automatisch.

23:28

Gehen wir ins Detail.

23:31

Genau, für die Spec. Wir müssen erstmal Kontext sammeln. Was wollen wir tun?

23:35

Wir müssen den Kontext aus Jira holen.

23:37

Was ist das Ticket, das Feature, was für Akzeptanzkriterien gibt es,

23:41

Beschreibungen, verlinkte Tickets, eventuell noch Screenshots,

23:44

die der Agent dann entsprechend runterladen kann.

23:49

Womit arbeiten wir gerade überhaupt das heißt, er muss sich die Code-Basis angucken,

23:52

verwandte Komponenten, Patterns, Architektur in dem Teil, wo das Ganze eingebaut wird,

23:58

und dann kommt wie gesagt das Brainstorming und QA, der Agent erstellt Empfehlungen

24:03

also es gibt dann immer quasi, man hat dann das bestimmt schon mal gesehen,

24:06

so eine Fragenauswahl und es gibt auch immer eine Sache, die der Agent empfiehlt

24:10

aber da muss man vorsichtig sein, da darf man sich nicht immer drauf verlassen,

24:15

und das Ziel des Ganzen ist, ein gemeinsames Verständnis zu erarbeiten,

24:19

wie das Ganze am Ende implementiert wird.

24:21

Und der Output ist dann die strukturierte Spec, die enthält die Recherche,

24:25

Einschränkungen, Anforderungen, Entscheidungen, die wir getroffen haben,

24:29

Aufgaben, Verifikationskriterien, quasi alles, was der Agent braucht,

24:33

um das später dann auch wirklich umzusetzen.

24:36

Genau, die Spec ist am Ende dann der Transfer des ganzen Kontexts.

24:40

Ohne die müssten wir dann in der nächsten Session quasi alles nochmal herleiten.

24:45

Genau, ich habe jetzt hier mal so ein bisschen aufgebaut, wie das Ganze dann

24:49

ungefähr aussieht im Claude Code. Bei uns heißt der Skill, den wir dafür nutzen,

24:54

G-Plan, weil unser Team, das Grizzlies-Team, heißt, wir haben immer so die Teamnamen

24:59

von gewissen Sportteams.

25:01

Und ja, Tix ist dann in dem Fall unser Jira-Projekt, also geht es dann los,

25:05

er lädt das Ganze aus Jira, okay, wir sollen eine Event-Filter-Komponente hinzufügen.

25:11

In den Akzeptanzkriterien steht, okay, da muss es einen Datumsfilter geben,

25:14

einen Kategoriefilter und einen Filter nach dem Ort.

25:18

Dann geht er in den Code rein, liest wirklich die Komponenten,

25:21

die wirklich was damit zu tun haben. Es existiert schon eine Filter-Bar in Vue und eine Eventlist.

25:26

Diese Komponenten findet er dann.

25:28

Dann jetzt das interaktive Q&A in sehr, sehr klein. Wie wollen wir den Filterstate

25:34

in der URL persistieren?

25:36

Ja, lass uns das als Query-Parameter machen, das klingt gut.

25:39

Was sollen wir machen, wenn keine Ergebnisse angezeigt werden?

25:42

Dann machen wir einen Empty State mit Reset Link.

25:46

Und dann wird am Ende die strukturierte Spezifikation geschrieben.

25:50

Und was dann auch noch ganz cool ist, eine Zusammenfassung der ganzen Spezifikation

25:54

postet er dann noch als Kommentar an unser Jira-Ticket, sodass wir später auch

25:58

das Ganze entsprechend dokumentiert haben.

26:00

Und dieses Spec ist dann am Ende der Vertrag zwischen dir und dem Agenten.

26:04

Der ist natürlich an der Stelle nicht rechtsbindend.

26:07

Genau, schauen wir uns mal an, wie das dann aussieht. Wir haben hier am Ende eine Markdown-Datei.

26:13

Und wie das Ganze hier aussieht, kann man natürlich frei festlegen,

26:16

das ist dann später Part von dem Specify-Skill, bei uns hat das Ganze einen

26:21

Titel, einen Status, welche,

26:23

Jira dazu gehört, wie der Branch heißen wird und auch eine Liste von Repositories.

26:29

Das hier ist jetzt natürlich sehr stark runtergedampft, damit wir da jetzt gemeinsam

26:33

raufgucken können, normalerweise steckt hier sehr, sehr viel Detail drin und

26:36

das kann auch über mehrere Seiten gehen.

26:39

Sehen wir, der Online-Shop zeigt Events ohne Filtermöglichkeit an.

26:42

Kunden brauchen Datum, Kategorie, Ortfilter.

26:44

Jetzt hat er hier seine Research Findings aus dem ganzen Code.

26:48

Dann hat er hier seine Requirements. Okay, wir brauchen Datumfilter,

26:51

Kategoriefilter, Ortfilter und so weiter und so fort.

26:55

Daraus leitet er dann verschiedene Tasks ab und guckt auch, wie er das Ganze

27:00

angeht und wann das auch wirklich fertig ist.

27:04

Und am Ende hat er dann seine Verifikations-Step. In dem Fall führt er die Test-Suite

27:08

aus, macht ein Linting, macht ein Type-Check und hat hier auch Akzeptanzkriterien,

27:13

die dann wiederum verbunden sind mit den Requirements.

27:16

Hier steht das für Must-Have, Should-Have und Won't-Do.

27:20

Also er macht jetzt zum Beispiel kein serverseitiges Caching der Filterkombination.

27:23

Diese kommen dann aus dem entsprechenden Q&A vorher.

27:28

Genau, dann implementieren wir das Ganze. Das ist tatsächlich am Ende der einfachste Teil.

27:32

Der Agent liest einfach die Spec und hat auch einen entsprechenden Skill,

27:37

mit dem er das dann bearbeitet und er hat eigentlich schon alles, was er braucht.

27:40

Und da nutzt er jetzt TDD, in unserem Fall in einem vereinfachten Cycle.

27:45

Normalerweise ist es ja Red-Green-Refactor.

27:48

In unserem Fall ist es dann einfach nur Red-Green, weil wir gemerkt haben,

27:51

da haben wir einen zusätzlichen Schritt drin, der dem Agenten jetzt nicht so wirklich weiterhilft.

27:57

Aber das Gute an TDD ist, dadurch hat er schon während der Implementierung automatisch

28:02

so einen Verifikationsloop, mit dem man sehen kann, okay, ist der Code,

28:06

den ich jetzt überhaupt, den ich baue, überhaupt funktional?

28:09

Und ich sag mal, am Anfang, wenn man das Ganze noch ein bisschen weniger automatisiert

28:13

laufen lässt, ist das auch ein super Punkt, um zwischendurch mal reinzugucken,

28:16

hey, kriege ich hier die Ergebnisse, die ich wirklich haben möchte,

28:20

sehen die Tests so aus, wie ich sie vielleicht auch schreiben würde.

28:24

Und kann dann da an der Stelle theoretisch auch schon mal intervenieren.

28:28

Genau, wir nutzen Conventional Commits und ich glaube, mit allen Sachen,

28:32

die ähnlich sind wie Conventional Commits, wenn man das jetzt,

28:34

sage ich mal, über die Firma ausrollt, ist es vielleicht ein bisschen Aufwand.

28:37

Für den Agenten ist jede Art von Dokumentation in Nullzeit gemacht.

28:41

Also gerne so viel Dokumentation hinzufügen, wie es sinnvoll ist natürlich,

28:46

auch nicht einfach nur, um sie zu haben, sondern wo es Sinn ergibt,

28:50

aber das ist eine super Möglichkeit, auch um neue Habits im Entwickeln mit einzubinden.

28:56

Und am Ende pusht er zum Remote auf den Feature-Branch und hat dann seinen ersten

29:02

Done-State quasi erreicht.

29:05

Das ist wirklich der einfachste Schritt, weil in der Spec schon so detailliert

29:08

beschrieben ist, was am Ende implementiert werden muss, dass der Agent da eigentlich

29:12

gar keine Fragen mehr hat. Der läuft dann auch komplett da durch und muss keine

29:17

Rückfragen mehr stellen.

29:18

In 95% der Fälle natürlich gibt es auch Fälle, wo dann doch nochmal eine Rückfrage

29:23

ist und man da reingehen muss und dann schauen muss, okay, wo hapert es jetzt?

29:28

Wir können uns das Ganze auch nochmal in Aktion angucken und da sehen wir nochmal,

29:34

die Spec ist nicht das Einzige, was er liest. Was in der Spec halt nicht drin

29:37

steht, ist, was projektspezifisch ist.

29:40

Dafür kann man die CLAUDE.md nutzen oder halt auch noch weitere Dokumentationen

29:45

im Projekt, das ist auch sehr wichtig.

29:48

Das ist auch, da kann ich mal so einen kurzen Ausflug machen,

29:51

wenn das Ganze jetzt über mehrere Repositories ist, ist das Ganze so,

29:54

dass wir quasi einen Ordner haben,

29:57

der bei jedem gleich ist, wo alle Repositories drin sind und darin steckt dann

30:01

auch die entsprechende Dokumentation, wie diese Repositories miteinander interagieren.

30:06

Ist das hier eine Bibliothek, ist das eine Verbindung über eine API,

30:10

das steht dann alles entsprechend eine Ebene drüber, wir nennen das Meta-Root,

30:15

ist aber kein offizieller Begriff, sage ich mal.

30:18

Genau. Wenn er dann den Kontext gelesen hat, schiebt er das Ticket in Development,

30:23

so wie wir es als Entwickler auch machen würden und fängt dann mit dem TDD-Zyklus an.

30:28

Drei Tests fehlgeschlagen und am Ende, ja, sind die Tests dann grün.

30:33

Der Lint wurde bestanden, damit ist das Feature fertig, er committet das Ganze und pusht am Ende.

30:39

Ich habe das hier jetzt weitestgehend, sage ich mal, auf Deutsch übersetzt.

30:42

Ich würde allerdings jedem empfehlen, bei Claude Code, wer kann mit Englisch

30:46

zu arbeiten, das spart Tokens, man kommt nicht so schnell in die Limits.

30:51

Das funktioniert meistens etwas besser, weil er es intern übersetzen muss.

30:56

Genau, das Ganze ist so designt, dass keine Interaktion normalerweise nötig

31:00

ist, bis alle Tasks fertig sind.

31:01

Er ist dazu angehalten, in diesen Skills halt auf dem Ergebnis immer wieder

31:05

zu iterieren und jeden Task zu committen und das Ganze so lange zu wiederholen,

31:09

bis er alle Tasks halt bestanden hat.

31:12

Nur wenn wirklich ein sehr grobes Problem auftritt, muss man da nochmal rangehen.

31:18

Genau. Kommen wir zu Verify. Das ist am Ende wirklich der schwierigste Schritt.

31:23

Der erste Part ist noch relativ einfach.

31:25

Wir gleichen einfach den Code ab mit der Spec. Da hat man sonst dann vielleicht,

31:29

nachdem man das Ganze implementiert hat, nochmal ins Jira-Ticket geguckt.

31:32

Okay, habe ich jetzt überhaupt das gebaut, was der Produktmanager sich da am Ende vorgestellt hat?

31:37

Das macht der Agent oder Claude Code in dem Fall jetzt automatisch.

31:41

Ist das wirklich der Intent, der da ursprünglich gegeben war?

31:45

Erfüllt das alle Anforderungen, alle Akzeptanzkriterien?

31:48

Dann die lokalen Checks, Linting, Testing, Typecheck, Kompilieren,

31:52

kommt natürlich ganz auf das Projekt an.

31:55

Alles, was lokal geht und Autofix bei entsprechenden Fehlern.

31:59

Dann kommt das Code Review, da jagen wir dann nochmal einen frischen Agent da

32:03

drauf, da kann man auch so ein bisschen experimentieren, möchte man ihm die

32:06

Spec zur Verfügung stellen, dass er schon weiß, worum geht es hier überhaupt,

32:10

oder lässt man ihn tatsächlich ohne die Spec da drauf, einfach nur, sage ich mal,

32:14

wirklich ein stumpfes Code Review, ich weiß gar nicht direkt,

32:17

worum es geht, ich schaue mir den Code an, ergibt das alles Sinn,

32:20

und er geht dann auch hin und macht automatisch Kommentare auf GitLab,

32:24

die dann halt wieder gefixt werden.

32:29

Genau. Der letzte Teil ist dann der DevTest. Das ist der härteste Teil.

32:33

Das unterscheidet sich auch je nach Projekt. Bei uns ist eigentlich alles webbasiert.

32:36

Da nutzen wir Playwright.

32:39

Das funktioniert ziemlich gut. Je nach Komplexität der Anwendung muss man da

32:43

auch noch so ein bisschen Kontext liefern.

32:44

Okay, wie bediene ich jetzt dieses Produkt?

32:48

Aber zum Beispiel unser Ticket-Online-Shop, da kann man den Agenten einfach

32:52

drauf loslassen, der weiß,

32:54

wie ein Shop generell funktioniert, es gibt eine Auswahl von Dingen,

32:57

die ich in den Warenkorb legen kann und dann muss ich Versand,

33:00

Zahlung und so weiter auswählen.

33:03

Da kann man ihn halt wirklich alleine durchlaufen lassen, da braucht man meistens

33:07

nur so ein bisschen Anlauf, dass er sich halt anmelden kann und alles,

33:10

aber sobald er dann erstmal drin ist, funktioniert das wirklich schon out of the box sehr, sehr gut.

33:16

Genau, jede dieser Schicht hat einen Autofix-Loop, also immer wenn ein Fehler

33:20

erkannt wird, wird der Agent dann in dem entsprechenden Skill dazu angehalten,

33:25

das Ganze wieder zu fixen

33:27

und dann weiterzumachen, sodass wir halt möglichst viel Automatisierung da drin

33:31

haben und nur an den Schritten, wo wir wirklich, sag ich mal,

33:34

wollen, dass wir manuell reingehen, das dann auch tun.

33:39

Genau, schauen wir uns das nochmal an. Wir haben den gepushten Code auf dem

33:43

entsprechenden Branch aus dem G-Dev-Skill, dann gehen wir in Verify rein und

33:48

er createt erstmal eine Draft Merge Request, prüft die auf Vollständigkeit und Anforderungen,

33:54

dann macht er lokal die Tests, Lint, Unit, Build, funktioniert alles,

33:58

Self-Review, findet was, eine fehlende Nullprüfung in Zeile 47,

34:03

fixt das Ganze automatisch, pusht nochmal hin, dann ist die Pipeline grün und

34:07

wir updaten den Merge-Request auf Ready.

34:10

Und das ist dann der Punkt, wo wir dann quasi tätig werden und wir sehen dann

34:13

auch auf unserem Jira-Board, hey, hier ist dieses Ticket auf Ready for Review

34:17

und unserem Team zugewiesen.

34:19

Dann gehen wir auf GitLab, schauen uns die Kommentare an, was halt richtig cool

34:22

ist. Automatisch macht der Agent dann auch, schon wenn er die Merge-Request

34:25

erstellt, meistens eine sehr gute Beschreibung, was hier passiert ist.

34:29

Also wir können dann schon direkt sehen, okay, das und das wurde gemacht.

34:34

Und haben es dann sogar beim Review noch ein bisschen einfacher.

34:36

Aber wir sind noch an dem Punkt, wo wir wirklich noch die Tickets am Ende reviewen,

34:40

auch wenn sich das natürlich hin und wieder mal ein bisschen staut.

34:44

Genau, dann kommt der Dev-Test. Obwohl das auch Part von Verify ist,

34:48

ist es halt der härteste Teil, deswegen haben wir das nochmal in den eigenen

34:51

Skill ausgelagert, der dann GQA heißt,

34:54

das heißt, unser Agent nutzt noch einen anderen Skill, den wir gebaut haben,

34:58

TIXX-Deploy heißt der in diesem Fall, der halt,

35:02

ein Branch oder ein Ticket, der zieht sich die Branches dann entsprechend aus

35:06

dem Ticket und kann dann auf ein bestimmtes Environment das Ganze deployen.

35:10

Dafür, wir hatten schon eine UI, mit der wir deployen können,

35:13

die wir uns selber gebaut haben. Da haben wir dann ein Skill erstellt,

35:16

die ihm beibringt, wie er diese UI bedient.

35:20

Und dann öffnet er mit Playwright hier einen Headless, einen echten Browser

35:24

und geht halt wirklich rein in den Shop, geht dann auf die Events,

35:28

testet die Filter aus, die er da findet,

35:31

funktioniert das alles, gibt es Fehler in der Dev-Konsole, im Browser,

35:36

das checkt er halt alles und dokumentiert das Ganze.

35:39

Und das ist dann wirklich so einer der Momente, wo es so ein bisschen magisch

35:43

war, wenn man in das Ticket dann reinguckt und dann sieht man da drin schon

35:46

Screenshots von einem funktionierenden Feature, was der Agent dann angehangen hat.

35:50

Da denkt man sich schon wirklich, oha, das ist schon krass.

35:55

Genau, sollte er Fehler finden, dann versucht er den Code zu fixen,

35:58

das Ganze neu zu deployen und das Ganze erneut zu testen.

36:02

Und dann, wenn das Ganze durch ist, geht das Ticket bei uns Ready for QA und

36:05

der Mensch macht dann die finale QA.

36:08

Aber der Agent hat schon quasi die komplette Vorarbeit geleistet.

36:12

So, kommen wir langsam so ein bisschen zum Ende.

36:15

Was sind jetzt unsere Erfahrungen, wo wir das jetzt seit Anfang des Jahres,

36:20

sage ich mal, sind wir komplett mit Spec-Driven Development unterwegs und allgemein

36:24

versuchen wir über die ganze Company AI-First zu entwickeln,

36:28

also dass wirklich jeder mit Claude Code seine Entwicklungen macht,

36:33

das ist nach einigen Ausprobieren unser Tool der Wahl.

36:36

Wir haben allerdings auch eine kleine Codex-Lizenz noch, für das man hin und

36:40

wieder mal vergleichen kann.

36:43

Wir haben tatsächlich mit externem Mentoring auch angefangen.

36:46

Da möchte ich einen Shoutout an Hackers & Wizards geben.

36:50

Könnt ihr gerne googeln, das war sehr, sehr gut. Dadurch haben sich,

36:53

sage ich mal, einige motivierte Engineers bei uns dann gefunden,

36:56

die das dann auch weiter in der Firma getragen haben.

36:59

Und bei uns hat das halt dazu geführt, dass wir dieses ganze Framework dazu entwickelt haben,

37:05

allerdings hatten wir hin und wieder auch das Gefühl, wir over-engineeren es

37:09

ein bisschen und jeder Dev hat seine eigenen Präferenzen,

37:13

deswegen haben wir das Framework so ein bisschen auch angepasst immer wieder,

37:18

um halt auch so ein bisschen individuelle Freiheit für jeden Entwickler zu machen,

37:23

aber dass wir halt alles, was wir im Team, sage ich mal,

37:27

zusammen auf die gleiche Weise machen sollen, ist dann ein Shared Skill Set,

37:30

was wir über ein Repository teilen, was dann wiederum ein Claude Marketplace

37:35

macht, sodass sich diese Skills auch updaten können automatisch.

37:39

Was ist uns noch aufgefallen? Tempo. Alles entwickelt sich extrem schnell.

37:43

Wir haben jede Woche einen Austausch bei uns im Team.

37:46

Es gibt immer ein neues Thema. Es gibt hier ein neues Modell, da ein neues Modell.

37:51

Ich habe das hier ausprobiert, ich habe das ausprobiert und ich kann euch wirklich

37:53

sagen, regelmäßiger Austausch ist da essentiell.

37:57

Und es ist auch schwer, ein gewisses Vertrauen in das, was man hat,

38:01

aufzubauen, weil es sich halt stetig weiterentwickelt, aber wir kommen da immer mehr hin.

38:07

Und eine ganz wichtige Sache am Ende, Ownership.

38:11

Am Ende besitzt du oder ihr oder ich am Ende trotzdem den Output.

38:16

Bugs, die entstehen, Architektur-Drift, Security, alles bleibt in der Verantwortung

38:21

der Entwicklung und nicht bei dem Agenten.

38:24

Genau. Aber perfekt ist der Feind von gut genug. Liefern, lernen, iterieren.

38:30

Was hat uns geholfen? Weniger ist mehr. Kurze, fokussierte Skills sind besser

38:35

als ewig lange Textblocks.

38:38

Coding Guidelines mussten wir nochmal deutlich verschärfen und deutlich klarer

38:41

machen, um halt Regeln für Mensch und Agent zu haben.

38:44

Viele Tests. Wir haben sehr, sehr viele Tests mit der KI geschrieben.

38:47

Da muss man wirklich drauf achten, dass man wirklich auch immer das Verhalten

38:51

testet. Der Agent neigt gerne dazu, den Code zu testen, anstatt des Verhaltens.

38:57

Wir haben unsere ADRs in die Repositories teilweise gepullt,

39:02

damit der Agent auch vergangene Architekturentscheidungen und Einschränkungen versteht.

39:06

Wir versuchen mehr in Richtung DDD zu gehen. Das ist halt auch super für Agenten,

39:11

weil Du hast einen kleinen Kontext, klare Grenzen und er weiß genau,

39:15

wo er arbeiten darf und wo er nicht arbeiten soll.

39:19

Saubere Architektur generell, sehr, sehr wichtig, um dem Agenten das Ganze zu machen.

39:24

Da wird der Legacy Talk bestimmt noch drauf eingehen. Der Agent kopiert halt

39:28

gerne, was er drumrum sieht. Und wenn das halt nicht gut ist,

39:31

dann produziert er halt auch keine gute Architektur.

39:35

Nichts davon ist wirklich neu, aber alles davon wird jetzt immer wichtiger.

39:41

Mit Blick auf die Zeit muss ich mich, glaube ich, ein bisschen beeilen.

39:44

So, wie war der Einfluss auf die Zusammenarbeit? Ich gehe da mal so ein bisschen

39:47

schneller durch. Am meisten haben wir es natürlich bei unserem Produktmanager gemerkt.

39:51

Wir waren jetzt ein bisschen schneller unterwegs und er musste versuchen mitzuhalten.

39:54

Also, was haben wir gemacht? Wir haben uns einmal mit ihm hingesetzt,

39:57

unsere ganzen relevanten Repos bei ihm auf dem Rechner aufgesetzt,

40:01

Claude Code installiert und mit ihm auch so ein paar eigene Jira-Skills,

40:05

mit denen er refinen kann und sowas aufgesetzt.

40:09

Und das Coole ist, er kann jetzt oft einfach auch Claude fragen,

40:12

anstatt dass er einen Entwickler direkt fragen muss,

40:15

um halt die ganze Security sowohl bei der Entwicklung als auch in der Applikation

40:19

halt hochzuhalten, haben wir auch gemeinsam Skills mit unserem Security-Team entwickelt.

40:26

Bei QA und UX haben wir ähnlich das wie bei dem Produktmanager gemacht und wir

40:30

haben auch eine größere Überlappung festgestellt.

40:33

Unser PM kriegt immer mehr technisches Wissen, wie die Applikation funktioniert

40:36

und wir müssen durch das schnellere Arbeiten halt auch immer mehr Produktentscheidungen selber treffen.

40:42

Und was man auch merkt, wenn man sich das Ganze durchliest, zwar hat man an

40:45

einigen Stellen weniger Zusammenarbeit, wenn man mit dem Agenten ist,

40:49

aber man kann auch Inselwissen abbauen, indem man halt mit den verschiedenen,

40:54

Parts halt eigene Skills entwickelt.

40:57

Wo anfangen? Um das Ganze selber zu implementieren, ich würde einen sparsamen

41:02

erstmal Spec- und Dev-Skill entwickeln und damit halt starten und dann nach

41:07

und nach die Quality Gates dazuholen. Da stelle ich auch am Ende was zur Verfügung.

41:12

Noch einfacher, einfach den Plan-Mode ausprobieren, aber einfach mit dem kleinen

41:16

Satz, interview mich bis ins letzte Detail, wie wir das implementieren wollen.

41:21

Das macht schon sehr, sehr viel und was dann immer ganz cool ist,

41:24

wenn die Session vorbei ist und das hat gut funktioniert für euch,

41:26

könnt ihr eben einfach sagen, mach mir daraus direkt einen Skill und das könnt

41:30

ihr dann immer wieder wiederverwenden.

41:32

Und der eine oder andere mag jetzt denken, okay, da passiert so viel automatisch,

41:36

brauchen wir noch Entwickler. Aber ich würde sagen, Entwickler sind wichtiger denn je.

41:40

Niemand wird ersetzt werden. Man muss mit der Zeit gehen, das war in diesem Feld aber immer so.

41:46

Und der Change, der kommt, in Zukunft entwickeln wir Agenten und Spec-Driven

41:50

Development Frameworks und alles drumherum, anstatt die Applikation selbst.

41:55

Ja, vielen, vielen Dank fürs Zuhören. Ich beantworte gerne noch ein paar Fragen.

41:59

Auf meinem GitHub findet ihr die eben erwähnten Starter-Skills.

42:03

Um selber zu starten und in dem Workshop morgen gehen wir natürlich nochmal

42:07

richtig ins Detail, wie ihr das Ganze implementieren könnt. Vielen Dank.

42:11

Ja, vielen Dank dir, Fabian. Schön, dass du auch nochmal auf den Workshop verwiesen

42:15

hast, denn da geht es dann, glaube ich, so wirklich ans Eingemachte.

42:18

Ich habe tatsächlich auch Fragen hier.

42:21

Ich fange mal an mit dem Tobias. Ups, jetzt springt es wieder,

42:24

weil noch Fragen reinkommen.

42:26

Ihr seid ja ein Frontend-Team. Wie macht ihr das mit Features,

42:30

die auch Backend-Änderungen erfordern? Wird das dann zum Bottleneck eventuell am Ende?

42:36

Das ist tatsächlich vom Titel nicht so richtig erkennbar, aber bei uns ist tatsächlich

42:41

so gut wie jeder Fullstack und ich habe sozusagen eine zweigeteilte Rolle.

42:46

Ich bin der Chapter-Lead für Vue, also für Frontend, aber das Team,

42:51

in dem ich Delivery mache und Tech-Lead bin, arbeitet tatsächlich Fullstack.

42:55

Also das wird für uns nicht zum Bottleneck. Wir entwickeln die Sachen dann gemeinsam.

43:00

Also wir nehmen dann die API und das Frontend und bauen das Feature halt zusammen.

43:05

Also wir haben am Ende dann eine Spezifikation, wo quasi beides abgedeckt wird.

43:11

Super, alles klar. Ingo hat noch eine Frage. Wo landen die generierten Specs?

43:15

Wird die entstehende Markdown-Datei direkt mit eingecheckt?

43:19

Das ist eine sehr, sehr gute Frage. Da gibt es verschiedene Ansätze.

43:24

Da hatte ich auch einen Artikel gewesen auf martinfowler.com tatsächlich, glaube ich.

43:30

Wir sind aktuell mit Spec First, nennt man es, unterwegs, wo wir das Ganze nicht einchecken.

43:36

Wir haben am Anfang die Specs eingecheckt, dass sie halt da sind und man sich

43:42

im Nachhinein nochmal das Ganze angucken kann.

43:44

Am Anfang haben wir sogar die Brainstorming-Session noch persistiert.

43:48

Also, was für Fragen wurden gestellt, welche Antworten, Möglichkeiten gab es

43:52

und welche haben wir gewählt, um wirklich alles nachvollziehen zu können.

43:56

Aber wir haben gemerkt, dass das halt durch die Entwicklung ganz schnell halt

44:00

outdated ist und wir das halt auch nicht, wir wollen das natürlich nicht aktuell halten,

44:05

und am Ende, da der Agent automatisch auch sehr detailliert ist bei Commit Messages,

44:09

Kommentare schreibt in Code, haben wir einfach nicht den Sinn gesehen,

44:13

diese ganzen Dateien noch zu behalten, aber da gibt es auch andere Ansätze.

44:18

Cool, danke dir vielmals. André hat die Frage, wie setzt ihr Coding-Guides um?

44:27

Eigentlich nicht groß anders als vorher. Also wir setzen uns mit dem Team zusammen

44:32

und schauen dann, wie wollen wir entwickeln.

44:37

Im PHP-Space ist es so, dass wir hauptsächlich PSR12, das ist so ein Standard,

44:42

wie kurz geschrieben wird, so vom Style her nutzen und da noch so ein paar kleine Anpassungen machen.

44:48

Im Vue-Bereich haben wir halt relativ umfangreiches Linting und alles,

44:53

sag ich mal, was man automatisieren kann, was dann am Ende über irgendein Skript

44:57

funktioniert, ist halt am besten, weil das ist dann ganz klar für den Agenten,

45:01

es funktioniert oder es funktioniert nicht.

45:05

Ansonsten verlinken wir das dann entsprechend in eine CLAUDE.md oder packen das

45:09

in einen eigenen Skill, das kommt so ein bisschen drauf an.

45:13

Okay, und ganz kurz mal zwischendurch, hier kommt auch noch ein lobendes,

45:18

sehr guter Vortrag. Dankeschön.

45:22

Genau. Und Ingo hat noch eine Frage zu den Kosten, falls du dazu Einblick geben

45:27

kannst. Habt ihr Daten zu den Kosten? Vor allem zum Vergleich Entwicklung durch

45:31

Agent versus Entwicklung durch den Menschen.

45:33

Was ist für euch der größte Mehrwert? Mehr Entwicklungskapazität,

45:37

bessere Resultate oder tatsächlich geringere Kosten?

45:43

Das ist eine ausgezeichnete Frage. Also, da ich ja am Anfang die Zahlen genannt

45:49

habe, also wir fahren das tatsächlich so, das machen, glaube ich, auch wirklich wenige.

45:53

Bei uns gibt es keine Limits. Jeder kann so viel KI-Tokens nutzen, wie er möchte.

45:59

Natürlich, wenn man sehr, sehr viel nutzt, gibt es auch hin und wieder mal eine

46:02

Nachfrage, hey, wofür war das?

46:04

Hat das Sinn ergeben? Aber solange es Sinn ergeben hat, ist es auch okay,

46:08

wirklich mal 500 Dollar an einem Tag zu verbraten, sage ich jetzt mal so.

46:12

Und wir sind da schon sehr weit oben.

46:16

Also das liegt schon im sechsstelligen Bereich, was wir da im Monat an AWS in dem Fall zahlen müssen.

46:24

Das ist schon recht viel. Und ich würde sagen, der Hauptbenefit ist wirklich,

46:30

dass wir ein bisschen mehr Kapazität dadurch kriegen.

46:34

Ich würde sagen, die Qualität ist in etwa gleich.

46:39

So, ich würde jetzt nicht sagen, dass die KI deutlich besseren Code schreibt,

46:43

als jetzt zum Beispiel ein Seniorentwickler.

46:45

Allerdings, wenn man es mit einem Junior vergleicht, ist es natürlich deutlich, deutlich darüber.

46:51

Genau, also die Kapazität würde ich sagen, ist der größte Benefit.

46:55

Ich danke dir nochmal vielmals für deinen Vortrag. Ich bin mir sicher,

46:58

dass die Leute auch morgen im Workshop noch so einiges mitnehmen können.

47:01

Und ja, ich würde sagen bis zum nächsten Mal.

47:05

Ja, bis dann.

47:24

Rheinwerkverlag.de slash Newsletter.