# 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)