# Presentation Outline: AI-Assisted Development in Production

> Brainstorming document — structure subject to change before we build the slides.
>
> **Audience:** Developers + Project Manager, gemischte KI-Erfahrung
> **Length:** 30 Minuten (≈ 25 min Vortrag + 5 min Fragen)
> **Language:** Deutsch — Code, Gitea-Issues und Persona-Auszüge bleiben auf Englisch

---

## Decisions

- **Language:** Deutsch — Folien und gesprochener Text auf Deutsch; Code, Gitea-Inhalte und Persona-Auszüge bleiben auf Englisch (kein Bruch — das Publikum liest Englisch)
- **Code depth:** Ein kurzes Code-Snippet maximal — reicht für Devs, PMs folgen dem Konzept
- **Gitea:** Echte Screenshots — überzeugender als nachgebaute Beispiele
- **Roter Faden:** Ein echtes Issue von Anfang bis Ende (z.B. #358 Stammbaum)
  - Das Publikum verfolgt dasselbe Issue von der vagen Idee → Spec → Review → Code → gemergte PR
  - Verhindert das "und jetzt ein anderes Beispiel"-Gefühl
- **Demo:** Keine Live-Demo — zu riskant für 30 min. Annotierte Screenshots stattdessen.

---

## Working title

**„KI als Team, nicht als Werkzeug"**
*(Untertitel: ein strukturierter Workflow für LLM-gestützte Entwicklung)*

Alternativen:
- „Von der vagen Idee zum Merge-Request — mit Claude"
- „Ein strukturierter Workflow für LLM-gestützte Entwicklung"

---

## Timing Budget

| Section | Slides | Minutes |
|---|---|---|
| 1. Title + Hook | 1 | 1 |
| 2. The Project | 2 | 2 |
| 3. The Problem with "just ask the AI" | 1 | 2 |
| 4. Workflow overview | 1 | 1 |
| 5. Idea & UI exploration | 2 | 3 |
| 6. The Personas | 2 | 3 |
| 7. Spec with Elicit → Gitea issue | 2 | 4 |
| 8. Persona issue review | 2 | 4 |
| 9. Implementation (TDD) | 2 | 4 |
| 10. PR review loop | 1 | 3 |
| 11. Takeaways | 1 | 2 |
| **Total** | **17** | **29** |

---

## Slide-by-Slide Outline

---

### 1 · Titel (1 min)

**„KI als Team, nicht als Werkzeug"**
Ein strukturierter Workflow für LLM-gestützte Entwicklung

- Einstiegssatz: „Die meisten nutzen KI als sehr schnelle Schreibkraft. Ich nutze sie als Team von Spezialisten."
- Keine separate Agenda-Folie — das Workflow-Diagramm in Abschnitt 4 übernimmt diese Rolle

---

### 2 · Das Projekt: Familienarchiv (2 min, 2 Folien)

**Folie 2a — Domäne**
- Familienarchiv: handgeschriebene Kurrent- und Sütterlin-Briefe, 1899–1950
- Crowd-Transkription durch 60+-Jährige am Laptop
- Mobile-first Leseerlebnis für jüngere Familienmitglieder
- Solo-Entwicklerprojekt — kein Team zum Review, Pair-Programming oder Rubber-Ducking

*PM-Takeaway: echte Domäne, echte Nutzer, echte Constraints*
*Dev-Takeaway: kein Toy-Projekt — voller Stack*

**Folie 2b — Stack & Umfang**
- Spring Boot 4 · SvelteKit 5 · PostgreSQL · MinIO · Paraglide i18n (de/en/es)
- 40+ UI/UX-Spec-Dateien, 360+ Gitea-Issues, laufende Entwicklung
- Screenshot der laufenden Anwendung

*Dev-Hinweis: Backend und Frontend, der Workflow muss die gesamte Vertikale abdecken*

---

### 3 · Das Problem mit „Einfach die KI fragen" (2 min, 1 Folie)

**Die vier typischen Misserfolge:**

| Was man tut | Was schiefläuft |
|---|---|
| Vage Idee beschreiben → Code anfordern | Output passt nicht zu dem, was man eigentlich wollte |
| Langen Prompt einfügen → Review anfragen | „Sieht gut aus!" — kein echter Widerspruch |
| Design + Code + Review in einer Session | Befangenheit: was selbst geschrieben wurde, wird nicht ehrlich kritisiert |
| Auf Gesprächskontext vertrauen | Nächste Session startet blank — kein Gedächtnis |

*Die Lösung für alle vier: Struktur und Trennung von Verantwortlichkeiten*
*Das ist ein Workflow-Problem, kein Prompt-Problem*

---

### 4 · Der Workflow im Überblick (1 min, 1 Folie)

```
Vage Idee
  │
  ▼
UI-Exploration ──► Spec (Elicit-Persona) ──► Gitea-Issue
                                                  │
                              ┌───────────────────┤
                              ▼                   │
                       Persona-Review  ◄──────────┘
                       (6 Spezialisten)
                              │
                              ▼
                       Feature-Branch
                              │
                        TDD: Red → Green → Refactor → Commit
                              │
                              ▼
                       Pull Request ──► Persona-PR-Review ──► Merge
```

*Das ist die Karte. Jeder Abschnitt zoomt in einen Schritt hinein.*
*Roter Faden: wir verfolgen Issue #358 durch jeden Schritt.*

---

### 5 · Idee & UI-Exploration (3 min, 2 Folien)

**Folie 5a — Von vage zu visuell**
- Start: „Ich möchte Familienbeziehungen auf der Dokumentdetailseite anzeigen"
- Bevor ein Wort Spec geschrieben wird: laufende App öffnen und erkunden
- Statisches HTML-Mockup generieren — es ist ein *Denkwerkzeug*, kein Produktionscode
- Zeigen: `specs/stammbaum-relationship-badge-spec.html` im Browser
- Visuell iterieren, bis der Scope konkret wird

*Warum zuerst?* Das Mockup bringt Entscheidungen ans Licht, von denen man nicht wusste, dass man sie treffen muss.
Scope-Unklarheiten auf Pixel-Ebene zu lösen ist billiger als in einem Requirements-Dokument.

**Folie 5b — Die HTML-Spec als Kommunikationsartefakt**
- Screenshot der Spec: annotiert mit Farb-Tokens, Breakpoints, Interaktionshinweisen
- Dient als Eingabe für das Elicit-Interview
- PM-Perspektive: ein Lo-fi-Wireframe, der in jedem Browser funktioniert

---

### 6 · Die Personas (3 min, 2 Folien)

**Folie 6a — Das Team vorstellen**

| Name | Rolle | Schwerpunkt |
|---|---|---|
| Elicit | Requirements Engineer | Nutzerforschung, JTBD, BABOK |
| Markus Keller | Architekt | Systemdesign, Trade-offs, Layering |
| Felix Brandt | Senior Developer | TDD, Clean Code, SvelteKit + Spring Boot |
| Leonie Voss | UX Designerin | Accessibility, Responsive Design, Brand |
| Sara Holt | QA Engineer | Testpyramide, Playwright, Randfälle |
| Nora „NullX" Steiner | Security Engineer | AppSec, OWASP, Auth |
| Tobias „tobi" Wendt | DevOps | Docker, CI/CD, Infrastruktur |

*Markdown-Dateien in `.claude/personas/`. Jede mit echtem Namen und Biografie.*

**Folie 6b — Aufbau einer Persona**

Kurzer Auszug aus `developer.md` (Felix) — auf Englisch, kein Kommentar nötig:

```
You are Felix Brandt, Senior Fullstack Developer …

## Hard Limits — What You Do NOT Do
- You NEVER write a test after the fact to justify existing code
- You NEVER skip the Red step, even for "obvious" implementations
- You NEVER commit a test and its implementation in separate commits

## What You DO
- Write the failing test first. Always.
- Reference specific line numbers in every review comment.
```

*Der „Hard Limits"-Abschnitt ist die entscheidende Idee.*
*Eine Persona ohne Grenzen driftet. Separation of Concerns gilt auch für KI-Rollen.*

---

### 7 · Spec schreiben mit Elicit → Gitea-Issue (4 min, 2 Folien)

**Folie 7a — Das Elicit-Interview**

- Elicit führt ein strukturiertes Interview (kein Code — nur Requirements)
- Input: das HTML-Mockup + die vage Idee
- Prozess: User Journey, Fehlerszenarien, nicht-funktionale Anforderungen, explizites Out-of-Scope
- Output: ein dichtes Gitea-Issue — keine Markdown-Datei im Repo

**Warum Gitea, nicht eine Datei?**
- LLM-Gespräche sind flüchtig; Gitea-Issues sind dauerhaft
- Issues sind verlinkbar: jeder Commit und jede PR referenziert sie
- Review-Kommentare, Spec und Entscheidungen leben in einem Thread
- Kein Risiko, dass eine Spec-Datei vom tatsächlich Gebauten abweicht

**Folie 7b — Aufbau eines echten Spec-Issues**

Issue #358 (oder ähnliches) annotiert zeigen — auf Englisch, kein Kommentar nötig:
- Problem statement: was fehlt/kaputt ist und warum es wichtig ist
- User Journey: Schritt für Schritt in einfacher Prosa, aus Nutzerperspektive
- E2E-Szenarien (Given/When/Then) → *werden direkt zu Red-Tests in TDD*
- Requirements: funktional + NFR
- Out of scope: explizite Ausschlüsse — verhindert Scope Creep

*PM-Perspektive: das ist der Vertrag vor Baubeginn.*
*Dev-Perspektive: das Szenario IST der erste fehlschlagende Test.*

---

### 8 · Persona-Issue-Review (4 min, 2 Folien)

**Folie 8a — Vor dem ersten Code: die Spec reviewen**

- `review-issue`-Skill schickt einen Agenten pro Persona
- Jede liest das Issue unabhängig — kein Group-Think
- Kommentare werden direkt als echte Gitea-Kommentare gepostet
- Jede Persona sucht nach Anderen Dingen:
  - Nora: Gibt es neue Endpoints? Ist Auth spezifiziert?
  - Sara: Sind die Szenarien tatsächlich testbar?
  - Leonie: Berücksichtigt die User Journey Mobile?
  - Markus: Verletzt das Design Domain-Grenzen?

**Folie 8b — Einen echten Review-Kommentar zeigen**

Screenshot oder Auszug: ein Kommentar einer Persona, der die Spec verändert hat
- Ideal: ein Fall, in dem eine Reviewerin etwas gefunden hat, das sonst einen Bug oder Rework verursacht hätte
- „Hier zu finden kostet null. Nach dem PR-Öffnen kostet es einen Tag."

---

### 9 · Implementierung: Red/Green/Refactor (4 min, 2 Folien)

**Folie 9a — Spec → Test → Code**

- `deliver-issue`-Skill koordiniert den gesamten Zyklus
- Das E2E-Szenario aus dem Issue IST der äußerste fehlschlagende Test
- Zyklus: fehlschlagender E2E-Test → fehlschlagende Unit-Tests → minimaler Produktionscode → grün → Refactor → atomarer Commit
- Ein logischer Change pro Commit; immer Feature-Branch

*PM-Perspektive: die Akzeptanzkriterien aus dem Issue sind die Definition of Done.*
*Das Feature ist nicht fertig, bis der aus dem Szenario geschriebene Test grün ist.*

**Folie 9b — Ein Code-Beispiel (kurz)**

Echter Test aus `feat/stammbaum-issue-358` — auf Englisch, kein Kommentar nötig:

```java
@Test
void getFamilyNetwork_excludesEdgesWithNonFamilyEndpoints() {
    // … setup …
    var result = service.getFamilyNetwork(personId);
    assertThat(result.edges())
        .noneMatch(e -> isNonFamilyPerson(e.targetId()));
}
```

`git log`-Auszug, der zeigt dass der Test-Commit vor dem Impl-Commit liegt

*Dev-Hinweis: Test und Implementierung liegen im selben atomaren Commit.*
*Das Log ist der Beweis, dass der Red-Schritt stattgefunden hat.*

---

### 10 · PR-Review-Schleife (3 min, 1 Folie)

**Wie der PR-Review funktioniert**

- `review-pr`-Skill liest den Diff; jede Persona postet Kommentare zur Gitea-PR
- Dieselben Spezialisten, jetzt auf Code-Ebene statt Spec-Ebene
- Andere Fragestellungen als beim Issue-Review:
  - Felix: folgt der Code dem Projektstil? Toter Code?
  - Nora: ist jeder neue Endpoint hinter `@RequirePermission`?
  - Sara: fehlen Randfallstests?
  - Leonie: stimmt der gerenderte Output mit der Spec überein?
- Zeigen: einen PR-Kommentar, der den Merge blockiert hat, bis das Problem behoben war

*Die Personas sind keine Gummistempel.*
*Jede hat eine harte Checkliste. Merge erst wenn alle Stimmen zufrieden sind.*

Schleife: Kommentare adressieren → pushen → Review erneut starten → wiederholen

---

### 11 · Fazit (2 min, 1 Folie)

1. **Spezialisierung schlägt den Generalisten** — eine Persona die „alles macht" driftet und genehmigt sich selbst
2. **Issues sind dauerhaftes Gedächtnis** — Spec + Entscheidungen + Review-Thread überleben jedes LLM-Gespräch
3. **Struktur tötet Leeres-Blatt-Lähmung** — Skills definieren WIE, Issues definieren WAS, du fokussierst auf WARUM
4. **Der Workflow ist das Produkt** — Code ist nur die Ausgabe; Reproduzierbarkeit kommt vom Prozess

**Ehrliches Caveat:**
- Aufwand am Anfang: gute Personas zu schreiben kostet Zeit
- Der Ertrag ist kumulativ: jedes neue Issue profitiert von der bestehenden Infrastruktur
- Kein Allheilmittel: die Personas sind nur so gut wie ihre Hard Limits

**Schlusssatz:**
*„Ihr wisst bereits, dass ihr einen Requirements Engineer, einen Architekten, einen Security Reviewer und einen QA-Spezialisten braucht.
Die Frage ist nur, ob ihr euch alle Vollzeit leisten könnt — oder ob ihr einer KI beibringen könnt, jede dieser Rollen zu spielen."*

---

## Vorzubereiten vor dem Folienbau

- [ ] Das eine Issue für den roten Faden auswählen — prüfen ob es eine gute Spec, echte Review-Kommentare und einen sauberen TDD-Trail in git hat
- [ ] Screenshots sammeln: laufende App, Spec-HTML, Gitea-Issue, Review-Kommentar, PR-Kommentar
- [ ] Den einen Persona-Auszug auswählen (Felix' Hard-Limits-Abschnitt ist am klarsten)
- [ ] Echte Zahlen eintragen: Anzahl Issues, Specs, Personas, Commits auf dem Branch
- [ ] Folienthema festlegen (Dunkel passt zu Code-Blöcken; alternativ Familienarchiv-Brandfarben Navy/Mint)
