Live Vibe Coding Battle: Eine Java-App mit GitHub Copilot bauen
mit Catherine EdelveisZwei vordefinierte Prompts, eine gemeinsame Java-App und strikte CI-Gates: Die One-Shot-Variante startete, scheiterte aber beim Abrufen der Ergebnisse, während der Split-Prompt-Workflow die stabilere App und die besseren Qualitätsmetriken lieferte.

YouTube
Live Vibe Coding Battle: Eine Java-App mit GitHub Copilot bauen
YouTube-Video laden
Dieses Video wird von YouTube eingebettet und erst nach Ihrer Einwilligung geladen. Beim Laden können personenbezogene Daten an YouTube oder Google übermittelt und Cookies gesetzt werden.
Mehr dazu in der Datenschutzerklärung.
Projektquelle
Arbeits-Repository
Hier findest du Prompts, Instructions und Beispiele aus dem gezeigten Modernisierungs-Workflow.
Repository öffnenTimestamps der Session
- 00:00Intro-Platzhalter
- 00:35Einführung
- 03:41Das Experiment erklären
- 20:58Catherine startet mit dem Single-Shot-Prompt
- 30:18Johannes startet mit dem iterativen Prompt (Datenbank + Domain-Layer)
- 51:30Kurze Zusammenfassung
- 55:30Prompt Nr. 2 für den iterativen Prompt (OpenAI-Integration)
- 01:12:00Prompt Nr. 3 für den iterativen Prompt (REST-API-Layer)
- 01:20:10Ergebnisse prüfen: Single-Shot-Prompt
- 01:27:00Prompt Nr. 3 braucht eine Weile...
- 01:30:30App ausführen: Single-Shot-Prompt
- 01:56:00Ergebnisse prüfen: Iterativer Prompt
- 02:03:00App ausführen: Interaktiver Prompt
- 02:13:30App ausführen: Iterativer Prompt
Dieser Stream war ein simples, aber nützliches Experiment: Catherine nutzte den vordefinierten Master Prompt in einem Schritt, ich nutzte den vordefinierten Split Prompt in sechs kleineren Schritten, und am Ende verglichen wir die Ergebnisse gegen dieselben CI-Gates. Die App selbst war ein kleiner Healthcare Assistant für Symptom-Analyse, KI-generierte Ratschläge und die Suche nach passenden Spezialisten.
Setup des Battles
Das Repository brachte bereits eine strikte Evaluierungspipeline mit, deshalb ging es nie darum, möglichst schnell Code zu erzeugen. Es ging darum, Code zu erzeugen, der unter Druck standhält.
Quality-Gates im Stream:
- Apache Maven PMD Plugin, um Stilprobleme, Duplikate und typische Maintainability-Probleme zu finden.
- SpotBugs Maven Plugin, um mögliche Defekte wie Null-Handling-Probleme, falsche API-Nutzung und riskante Implementierungsmuster aufzudecken.
- JaCoCo Maven Plugin, um Testabdeckung zu messen und sichtbar zu machen, wie viel des generierten Codes tatsächlich ausgeführt wurde.
- Trivy, um das Projekt auf bekannte Schwachstellen in Abhängigkeiten und Build-Artefakten zu scannen.
- OWASP ZAP Baseline Scan, um einen leichten dynamischen Sicherheitscheck gegen die laufende Anwendung auszuführen.
Genau dieses Setup machte die Session nützlich, weil Copilot-Output an objektiven Checks gemessen wurde und nicht am ersten Eindruck.
Ergebnisse aus dem Livestream
GitHub-Action-Ergebnisse von One-Shot Prompt und Split Prompt.
| Tool / Metrik | One-Shot | Split Prompt |
|---|---|---|
| JaCoCo Coverage | 11% | 32% |
| PMD-Verstöße | 1 | 0 |
| SpotBugs Gesamtfehler | 26 | 17 |
| Trivy Schwachstellen | 3 | 3 |
| ZAP Medium | 2 | 2 |
| ZAP Low | 6 | 6 |
Das Hauptergebnis war klar:
- der One-Shot Master Prompt erzeugte eine laufende Anwendung, aber das Abrufen der Ergebnisse scheiterte an internen Fehlern
- der Split-Prompt-Ansatz erzeugte eine laufende Anwendung
- statische Analyse und testbezogene Ergebnisse fielen klar zugunsten der Split Prompts aus
Wichtiger Kontext: Das war kein Fehler von Catherine. Das eigentliche Problem war die Komplexität des Prompts. Der Master Prompt wollte in einem Schritt zu viel erledigen, was Debugging und Korrekturen schwerer machte.
Kurzer Vergleich: Master Prompt vs Split Prompt
Hier ist der praktische Unterschied zwischen den beiden Ansätzen, die wir genutzt haben.
| Dimension | Master Prompt (One-Shot) | Split Prompts (6 Schritte) |
|---|---|---|
| Scope pro Generierung | Ganze App in einem Durchgang (DB, OpenAI-Services, REST-API, Vaadin-UI, Tests, JMeter, Docker) | Eine Schicht nach der anderen (Domain, AI-Services, API, UI, Tests, Performance/Docker) |
| Feedback-Loop | Spät und breit: Fehler erscheinen erst nach vielen gekoppelten Änderungen | Früh und lokal: Jeder Schritt kann gebaut und geprüft werden, bevor es weitergeht |
| Debugging-Aufwand | Hoch, weil Ursachen über mehrere Schichten verteilt sind | Niedriger, weil Regressionen auf den aktuellen Schritt begrenzt sind |
| Architektonische Kontrolle | Schwächer: mehr Raum für unbeabsichtigte Kopplung zwischen Schichten | Stärker: klarere Grenzen und schrittweise Integration |
| Session-Ergebnis | App startete, aber das Abrufen zentraler Ergebnisse scheiterte an internen Fehlern | Eine laufende App mit funktionierendem Ergebnisfluss und besseren Qualitätsmetriken |
Die Kurzfassung: Der Master Prompt optimierte auf Vollständigkeit in einem Durchgang, die Split Prompts auf inkrementelle Korrektheit.
UI-Ergebnis (unerwartet)
Ein überraschender Teil des Streams war die UI-Qualität: Beide generierten Anwendungen sahen rau aus, obwohl wir Vaadin genutzt haben und Vaadin normalerweise solide Default-Stylings mitbringt. Wir konnten während der Session nicht vollständig erklären, warum beide UIs so schlecht aussahen.

Was tatsächlich besser funktioniert hat
Der Split-Prompt-Workflow veränderte zwei Dinge, die am meisten zählten:
- jeder Schritt ließ sich sofort validieren
- wir konnten nachvollziehen und reviewen, was das Modell geändert hatte, bevor wir weitergingen
Das gab mehr architektonische Kontrolle und machte es leichter, Copilot zu korrigieren, wenn selbstbewusst falscher Output entstand.
Genau deshalb ließ sich der Split-Ansatz leichter steuern und leichter vertrauen.
Warum die Qualitäts-Gates wichtig waren
Ohne automatisierte Checks hätte dieser Stream eine Weile so wirken können, als seien beide Ansätze irgendwie "okay".
Die CI-Gates machten die Unterschiede sichtbar:
- Codequalitätsprobleme wurden schnell von PMD und SpotBugs sichtbar gemacht
- Sicherheits- und Analyse-Checks verhinderten stille Regressionen mit Trivy und OWASP ZAP Baseline
- wir konnten Prompting-Stile über messbares Feedback vergleichen
Genau hier wird Vibe Coding real: Wenn der Code deine Guardrails nicht besteht, ist er nicht fertig.
Praktische Takeaways
- vermeide übergroße One-Shot-Prompts für mehrschichtige Java-Apps
- zerlege die Arbeit in kleinere Prompts mit klaren Akzeptanzkriterien
- führe statische Analyse und Tests nach jedem sinnvollen Schritt aus
- behandle KI-Output als Entwurf, der reviewt werden muss, nicht als Wahrheit
- optimiere im Entwicklungsprozess für Erklärbarkeit, nicht nur für Geschwindigkeit
Hilfreiche Links
Abschließender Gedanke
Diese Session war eine gute Erinnerung daran, dass besseres Prompting nicht bedeutet, einfach einen längeren Prompt zu schreiben. Es geht darum, einen Workflow aufzubauen, in dem jeder Schritt klein genug ist, um validiert zu werden.
Der One-Shot Master Prompt brachte die App zwar zum Starten, scheiterte aber weiterhin beim internen Abrufen der Ergebnisse. Die Split-Prompt-Strategie lieferte den stabileren End-to-End-Flow und die besseren Qualitätssignale. Für produktionsorientierte Java-Teams ist das die stärkere Standardeinstellung.
Kommentare
Kommentare optional von GitHub laden
Die Kommentarfunktion wird über Giscus und GitHub Discussions bereitgestellt. Sie wird erst nach Ihrer ausdrücklichen Einwilligung geladen. Beim Laden können personenbezogene Daten wie Ihre IP-Adresse und technische Metadaten an GitHub übermittelt sowie Cookies oder ähnliche Technologien gesetzt werden.
Bitte bestätigen Sie zuerst Ihre Einwilligung, bevor die Kommentare geladen werden.