CAS · Workshop · Mai 2026

KI macht Coden leichter und explizite Architektur dadurch wichtiger.

Ein Vortrag über Softwarearchitektur mit und für AI.

Thomas Rolf Mannhart

Einleitung

Vor knapp einem Jahr: Mittwoch, 18. Juni 2025

Am FHNW Data Science & Data Engineering Alumni Event habe ich genau zu diesem Thema einen Vortrag gehalten.

Ich klicke gleich kurz durch die damaligen Folien.

Frage ans Publikum: Was davon ist heute, im Mai 2026, immer noch gültig, und was wirkt heute schon angestaubt?
Alumni-Deck · 1 von 13

AI Augmented Software Engineering

Ihr persönlicher Junior Dev: super-schnell, immer verfügbar, konsequent unkritisch.

Alumni-Deck · 5 von 13

Vom Wildwuchs zur Strategie

Alumni-Deck · 6 von 13

KI-Strategie

Alumni-Deck · 7 von 13

Kontext ist King

Arbeiten mit dem Development Funnel.

Alumni-Deck · 8 von 13 · Development Funnel
SchichtKontextTool
Breite RechercheDas InternetDeep Research
Analyse unbekannter CodebasesGanze CodebasesCoding Agents (Claude Code, Junie, …)
Integration in eigene CodebaseTeil der CodebaseRepoMix, Gemini
ImplementierungAusgewählte FilesAI Assistants (Claude, Gemini)
Alumni-Deck · 9 von 13

Junior Developer 2.0

super-schnell, immer verfügbar, konsequent unkritisch.

Alumni-Deck · 10 von 13 · Junior Dev 2.0
Alumni-Deck · 11 von 13 · Senior Dev
Alumni-Deck · 12 von 13 · Zusammenfassung
Die Pointe nach dem Rückblick

Erstaunlich gemischt.

Die KI-Welt entwickelt sich rasend schnell, aber wenn man genau hinschaut, halten die Grundsätze überraschend gut.

Die Botschaft: Ihr müsst nicht jedem neuen Tool hinterherrennen. Ihr müsst die Grundsätze beherrschen.

whoami

Thomas Rolf Mannhart

Hintergrund

  • B.Sc. Wirtschaftsinformatik · M.Sc. Artificial Intelligence
  • 7 Jahre Software-Entwicklung
  • Seit 2023 zusammen mit AI
    ChatGPT-3.5 → Claude Code

Heute

Behauptung

KI macht Coden leichter und explizite Architektur dadurch wichtiger als je zuvor.

Überblick

Tagesstruktur des Workshops

Vormittag

Info 1 + Info 2 als Vortrag

Übung 1: Mealie Part 1

Architektur entdecken, dokumentieren, Layering-Smell finden, Refactoring unter Regression-Netz.

Nachmittag

Info 3 als Vortrag

Übung 2: Mealie Part 2

LiteLLM als Gateway + Pydantic/Instructor als ACL vor die direkten Provider-SDK-Calls schalten.

Nutzen für das Publikum

Drei Fragen, eine pro Teil.

  1. Wie muss Architektur aussehen, damit ein Team mit Coding-Agenten überhaupt funktioniert? (→ Info 1)
  2. Wie kann AI euch als Architekt:innen konkret helfen? (→ Info 2)
  3. Wie muss Architektur aussehen, wenn AI selbst Teil eures Produkts ist? (→ Info 3)
  4. Eine Auswahl an erprobten Open-Source-Tools zu allen drei Fragen.
Teil 1 von 3

Architecture as Code

Architektur muss durchsetzbar UND maschinenlesbar werden, sonst existiert sie für den Coding-Agent nicht.

Teil 1 · Drei Ebenen

Explizit, maschinenlesbar, durchsetzbar.

1. Vertrag

vor dem Coden

  • CLAUDE.md / AGENTS.md
  • ADRs versioniert
  • arc42 / C4 als Code (LikeC4, Structurizr DSL)
  • Skills & Slash-Commands

2. Lint-Regel

nach dem Coden

  • import-linter (Python)
  • ArchUnit (JVM)
  • Spring Modulith
  • Verstoss = roter Build

3. Review-Gate

ein anderes Modell

  • PR-Review durch fremde Modellfamilie
  • Idealerweise mehrere parallel
  • Sieht, was der Coding-Agent strukturell übersehen hat
Teil 2 von 3

Brownfield wird wieder bewegbar.

AI verschiebt die Schmerzgrenze drastisch nach hinten: was Wochen dauerte, wird Tagesarbeit.

Teil 2 · Schlüssel-Pattern

Test-Sicherheitsnetz vor Refactoring.

  1. Mutation Tests prüfen die Qualität bestehender Tests
    mutmut · Stryker · PIT: seit Jahrzehnten praktikabel, nur teuer; AI senkt die Hürde drastisch.
  2. Snapshot Tests fixieren das beobachtbare Verhalten
    syrupy · Jest Snapshots · ApprovalTests
  3. Erst dann refactored die KI: Ergebnis ist deterministisch validierbar: Tests nachweislich gut (Mutation Score) UND Verhalten identisch (Snapshots).

Budget-Verschiebung: AI macht Coding und Testing schneller, aber nicht im selben Maß. Anteil Testing wächst, absoluter Output steigt deutlich.

Brücke zur Übung 1

Vom eingefrorenen Modul zur Tagesarbeit.

Legacy-Modul → mit AI in Stunden statt Wochen verstanden, mit Mutation+Snapshot abgesichert, in Tagen statt Monaten refactored.

Übung 1 (Vormittag): Mit der LikeC4-Sicht aus Info 1 im Rücken: Snapshot-Sicherheitsnetz aufbauen, Layering-Smell unter dieser Sicherung refactoren, Linter bleibt grün.

Übung 1 · Vormittag · Überblick

Architektur entdecken & härten an Mealie.

Echte Open-Source-Codebase als Spielwiese. In fünf Schritten von „nie gesehen" zu „sicher refactored".

  1. Verstehen: Architektur dokumentieren lassen.
  2. Regel setzen: Schichtenarchitektur als Decision Record.
  3. Erzwingen: Linter prüft die Regel in CI.
  4. Absichern: Snapshot-Tests als Regression-Netz.
  5. Refactoren: den schlimmsten Verstoss unter dem Sicherheitsnetz beheben.

Werkzeugkasten: Claude Code · arc42 · LikeC4 · grimp · import-linter · syrupy

Teil 3 von 3

Software mit AI-Komponenten
braucht eine eigene Architektur-Disziplin.

Sobald AI im Produktivsystem läuft, gelten Regeln, die kein klassisches Architektur-Framework kennt.

Teil 3 · Qualitätsattribute

Was bricht, und was hilft dagegen.

AttributWas brichtArchitektur-Antwort
TestbarkeitOutputs nicht-deterministischEval-Harness, Golden-Dataset, Eval-on-Merge
Latenzp50 1–5 s, lange TailsStreaming, zweischichtiger Cache, kleinere Modelle
Kostenneue Dimension (Tokens)Gateway-Budgets, Modell-Kaskade, Batch
WartbarkeitPrompt-Drift bei stillen UpgradesVersionen pinnen, Prompt-Registry
VerlässlichkeitProvider-Ausfälle, Throttling, DeprecationsMulti-Backend-Pool, Circuit-Breaker, Fallback
ComplianceErklärbarkeit ist hartLogging-Tripel, Post-Validatoren, HITL
SicherheitLethal Trifecta, Excessive AgencyBeurer-Kellner-Patterns, Defence-in-Depth
Teil 3 · Leitprinzip

Gateway + ACL als deterministische Hülle.

AI-Gateway (vorne)

Zentrale Schleuse zum LLM:

  • Multi-Backend-Pool
  • Circuit-Breaker pro Modell
  • Fallback & Versionen pinnen
  • Gateway-Budgets, Modell-Kaskade
  • Logging-Tripel

Tool 2026: LiteLLM

Anti-Corruption Layer (hinten)

Schutzhaut zwischen LLM und Geschäftslogik:

  • Streaming, zweischichtiger Cache
  • Deterministische Post-Validatoren
  • HITL bei folgenreichen Aktionen
  • Kerntechnik: Structured Outputs

Tool 2026: Pydantic + Instructor

Wer beide hat, hat 80 % der Antworten in einer einzigen Skizze.

Teil 3 · Eval ist das LLM-Pendant zum Test

Pre-Deploy-Gate + Post-Deploy-Schicht.

Promptfoo · Pre-Deploy

promptfoo eval blockt PRs bei Regression, analog zum Test-Gate.

Langfuse · Post-Deploy

Tracing + Prompt-Registry + Cost-Tracking. Failure-Cases wandern als neue Test-Cases zurück in Promptfoo.

Wichtig: Ein LLM darf nie sich selbst beurteilen (Bias).

Teil 3 · Spickzettel

LLM Code Smells.

Mahmoudi et al.: 5 formalisierte Smells

  1. Unbounded Max Metrics: Token-Budgets, Timeouts, Retries unbounded
  2. No Model Version Pinning: Provider-Alias statt immutable Version
  3. No System Message: System-Message weggelassen
  4. No Structured Output: Free-Form Text wo Schema erwartet
  5. Temperature Not Explicitly Set: implizite Defaults, nicht reproduzierbar

Quelle: Mahmoudi et al., „Specification and Detection of LLM Code Smells" (arXiv:2512.18020, ICSE-NIER 2026).

Meine Ergänzungen

  1. Prompt-as-String: Prompt im Code, keine Registry
  2. Leaky Vendor Abstraction: Provider-SDK im Aufrufpfad
  3. Synchronous Blocking Call: UI blockiert auf 5-Sekunden-LLM
  4. No-Observability Call: kein Tracing, keine Cost-Logs
  5. Cost-Leaking Loop: unbegrenzte Agent-Iterationen
  6. Cache-Absent: jede Query trifft den Provider
  7. Eval-Harness Absent: kein Pre-Deploy-Gate
  8. Trust-no-Error-Surface: LLM-Fehler als Geschäftslogik
Teil 3 · Sicherheit als eigene Disziplin

Referenzen zur Selbstvertiefung.

Brücke zur Übung 2

Die deterministische Hülle bauen.

In Übung 2 schiebt ihr LiteLLM als Gateway und Pydantic + Instructor als ACL zwischen Mealie und die Provider-SDK-Calls.

Anschliessend übt ihr Fallback und Rate-Limit am laufenden System.

Übung 2 · Nachmittag · Überblick

AI als Teil des Produkts härten.

Wir geben Mealie einen LLM-Gateway, und verbessern den ACL, wenn die Zeit reicht.

  1. Baseline: heutiges Verhalten als Regression-Netz festhalten.
  2. LLM-Sicht: alle LLM-Aufrufer auf einer Skizze.
  3. Gateway einziehen: die Provider-Calls hinter eine Schleuse legen.
  4. Routing erleben: Fallback & Rate-Limit am laufenden System ausprobieren.
  5. ACL härten: provider-agnostisches Schema-Binding mit automatischem Retry.

Werkzeugkasten: LiteLLM · Pydantic · Instructor · import-linter

Zusammenfassung

Wir fassen zusammen.

  1. Explizite Architektur (Architecture as Code): was nicht maschinenlesbar ist, existiert für den Coding-Agent nicht.
  2. Brownfield wird wieder bewegbar: Mutation+Snapshot baut das Sicherheitsnetz, unter dem AI Legacy-Code in Tagen statt Monaten refactored.
  3. Software mit AI-Komponenten braucht eine eigene Architektur-Disziplin: Gateway, ACL, Eval, Guardrails sind 2026 Pflicht.

Damit schliesst sich der Kreis zur Einleitung: „Software-Architektur und Verantwortung bleiben beim Menschen" stand schon 2025 auf den FHNW-Folien. Heute war das die Vertiefung dieses Satzes.

Und damit zur Behauptung, jetzt mit Substanz darunter.

KI macht Coden leichter und explizite Architektur dadurch wichtiger als je zuvor.

Appell

Drei Schritte, alle beginnen heute.

  1. Probiert's heute gleich aus.
  2. Tauscht euch untereinander aus.
  3. Nehmt mit, was ihr braucht, für eure CAS-Projekte und für euren Alltag.

Bleibt in Kontakt.

Danke

Fragen?

Thomas Rolf Mannhart

thomas@mannhart.ai · thomasrolf.mannhart@fhnw.ch

Anhang

Glossar

Begriffe und Tools aus dem Vortrag: kompakte Referenz zum Nachschlagen.

Volltext: lecture/glossary.md

Glossar · Tools · LLM-Stack

Gateway, ACL, Eval, Tracing.

LiteLLM: Open-Source-Proxy/SDK, der 100+ LLM-Provider hinter einem OpenAI-kompatiblen Interface bündelt. Spend-Tracking, Virtual Keys, Load-Balancing, Guardrails. Im Vortrag die Gateway-Schicht.

Pydantic: meistverwendete Python-Validierungs-Library; Schemas via Type-Hints, Rust-Kern. Basis für Structured Outputs.

Instructor: auf Pydantic aufsetzende Library, validiert LLM-Antworten gegen Schema mit Auto-Retry. ACL-Pendant zu LiteLLM.

Promptfoo: CLI für LLM-Eval und Red-Teaming („Pytest für Prompts"); Pre-Deploy-Gate. Im März 2026 von OpenAI für $86 M übernommen, MIT-Lizenz bleibt.

Langfuse: Open-Source-LLM-Engineering-Plattform: Tracing, Prompt-Registry, Eval, Cost-Tracking. Post-Deploy-Schicht.

Repomix: packt ein Repo zu einer einzigen AI-freundlichen Datei (XML/Markdown), respektiert .gitignore, Token-Counts. Funnel-Schicht „Integration in Codebase".

MCP (Model Context Protocol): offener Standard (Anthropic, Nov 2024) für LLM ↔ externe Systeme. „USB-C für AI", drei Primitive: tools, resources, prompts. Seit Dez 2025 unter Linux Foundation (AAIF).

Glossar · Tools · Coding-Agents & Architektur-Linter

Coding-Agents

Claude Code: Anthropics offizieller CLI-Coding-Agent (Terminal, Web, IDEs). Referenz für „Analyse unbekannter Codebases".

Junie: JetBrains-eigener AI-Coding-Agent, lebt in IntelliJ-Ultimate / PyCharm Pro, Bring-your-own-LLM, plant mehrstufig.

CLAUDE.md / AGENTS.md: Markdown-Dateien im Repo-Root, die Coding-Agenten zu Session-Beginn lesen. AGENTS.md: 2025 von OpenAI, Google, Sourcegraph, Cursor, Factory als offener Standard gestartet, 20 000+ Repos, jetzt unter AAIF/Linux Foundation.

Architektur-Linter

import-linter: Python-CLI, prüft Imports gegen Layers/Forbidden/Independence-Contracts. Verstoss = roter Build.

ArchUnit: Java-Library, testet Architekturregeln (Layered, Onion, Slices, Cycles) als Unit-Tests. Pendant auf JVM.

Spring Modulith: Spring-Erweiterung für modulare Monolithen mit expliziten Modul-Boundaries und automatischer Verifikation (./mvnw modulith:verify).

Glossar · Tools · Mutation- & Snapshot-Tests

Mutation Testing

mutmut: Python-Mutation-Tester. Mutiert Source (z. B. >>=), überlebende Mutanten = Test-Lücken.

Stryker: JS/TS (auch C#, Scala). Seit 4.0 mit Mutation Switching (alle Mutanten gleichzeitig im Code, ein aktiv); 20–70 % schneller.

PIT (pitest): JVM-Mutation-Tool, mutiert Bytecode in-memory statt auf Platte. Maven/Gradle, JUnit/TestNG.

Snapshot / Approval Testing

syrupy: Pytest-Plugin, zero-dependency, speichert Output in __snapshots__/.

Jest Snapshots: De-facto-Standard in JS/TS; erste Ausführung erzeugt .snap, spätere Läufe diffen dagegen.

ApprovalTests: Library-Familie (Java/.NET/Python/C++/Go). Approvals.verify() erzeugt .received, manuell zu .approved umbenannt; spätere Läufe diffen.

Glossar · Architektur-Konzepte (1/2)

Architecture as Code.

Architecture as Code: Architektur in versionierten Text-Artefakten (DSL, Markdown, ADRs, Lint-Regeln) statt Folien/Confluence. Voraussetzung, dass Coding-Agenten die Architektur überhaupt sehen.

ADR (Architecture Decision Record): Kurzes Doc je Entscheidung (Status, Context, Decision, Consequences). Format: Michael Nygard, 2011.

arc42: Open-Source-Template (Starke/Hruschka, 2005) für Architekturdoku in 12 Abschnitten. Tool-/format-agnostisch.

Development Funnel: mentales Modell aus dem Vortrag: Tools nach Kontext-Sicht (Internet → Codebase → Files).

C4-Modell: Notation von Simon Brown (2006–2011): Context · Container · Component · Code. Leichtgewichtig, UML-Alternative.

LikeC4: DSL und Toolchain inspiriert von C4 / Structurizr DSL, mit frei definierbaren Element-Typen. Ein Modell → mehrere interaktive Diagramme.

Structurizr DSL: Text-DSL des C4-Erfinders Simon Brown. Workspace = Modell + Views.

Brownfield / Greenfield: Greenfield = neues Projekt; Brownfield = bestehendes System mit Legacy. Vortrag: AI macht Brownfield wieder bewegbar.

Glossar · Architektur-Konzepte (2/2) · LLM-spezifisch

Anti-Corruption Layer (ACL): DDD-Pattern (Eric Evans). Übersetzungsschicht zwischen eigenem Modell und Fremdsystem (Legacy, Third-Party, oder LLM).

AI-Gateway: zentrale Schleuse: Multi-Backend-Pool, Routing, Circuit-Breaker, Budgets, Logging, Versions-Pinning. Realisiert via LiteLLM.

Circuit Breaker: Resilience-Pattern (Nygard, Release It!): nach Fehler-Schwelle kurzschliessen, Half-Open-Probe testet Recovery. Im LLM-Kontext pro Modell/Provider.

Model Cascade: Anfrage zuerst an billiges Modell; nur bei niedriger Confidence ans teure eskalieren. 45–85 % Kosten-Reduktion möglich.

Structured Outputs: LLM gegen JSON-Schema / Pydantic / Grammar zwingen statt Free-Form-Text. Constrained Decoding.

HITL (Human-in-the-Loop): Mensch gibt folgenreiche Aktionen explizit frei. Pflicht-Antwort auf Excessive Agency.

Eval Harness: Test-Infrastruktur, die LLM-Aufrufe gegen ein Golden Dataset mit Assertions ausführt; CI-Gate. LLM-Pendant zur Test-Suite.

Golden Dataset: manuell kuratierte Input/Erwartungs-Paare; Source of Truth für Quality-Messung. Wächst durch Failure-Cases.

Prompt Registry: versionierte Prompt-Ablage ausserhalb Code (Metadaten, A/B, Diffs). Vermeidet Prompt-as-String.

Glossar · Test-Techniken

Mutation- und Snapshot-Tests.

Mutation Testing

Misst die Qualität der Test-Suite. Kleine Mutationen werden in den Source-Code eingespielt; Tests, die die Mutation nicht erkennen („überlebt"), markieren Lücken. Mutation Score = % gekillter Mutanten.

Snapshot / Approval Testing

Statt Erwartungswerte explizit zu codieren, wird der Output beim ersten Lauf als Snapshot gespeichert. Spätere Läufe diffen dagegen. Geeignet, um beobachtbares Verhalten von Legacy einzufrieren vor dem Refactoring.

Glossar · LLM Code Smells

Mahmoudi et al. + Ergänzungen.

Mahmoudi et al. (5)

Unbounded Max Metrics: Token-Budgets, Timeouts, Retries ohne Cap.

No Model Version Pinning: Provider-Alias statt immutable Version → stilles Verhaltens-Drift.

No System Message: System-Prompt fehlt; keine Rolle, keine Constraints.

No Structured Output: Free-Form-Text wo Schema nötig.

Temperature Not Explicitly Set: implizite Defaults, nicht reproduzierbar.

Ergänzungen aus dem Vortrag

Prompt-as-String: Prompt im Source, keine Registry, keine A/B-Tests.

Leaky Vendor Abstraction: Provider-SDK direkt im Aufrufpfad → Vendor-Lock-in, kein einheitliches Logging.

Cost-Leaking Loop: Agent-Loop ohne Iterations-Cap, ruft sich endlos selbst auf.

Prompt Injection: Angriffsklasse: Anweisungen in Daten versteckt (Mail, PDF, PR-Text), die das LLM als legitime Instruktion ausführt. Begriff: Simon Willison, Sep 2022.

Glossar · Sicherheit · Konzepte

Lethal Trifecta: Simon Willison (Juni 2025): gefährdet, sobald alle drei zutreffen: private Daten · untrusted Content · externe Kommunikation.

Excessive Agency: OWASP LLM06:2025. Agent hat zu viele Tools/Permissions und führt auf manipulierte Outputs hin folgenreiche Aktionen aus. Mitigation: Least-Privilege + HITL.

Beurer-Kellner-Patterns: sechs Patterns für sichere LLM-Agenten (arXiv:2506.08837): Action-Selector · Plan-Then-Execute · LLM Map-Reduce · Dual LLM · Code-Then-Execute · Context-Minimization.

Defence-in-Depth: mehrere unabhängige Schutzschichten statt einer Mauer. Im LLM-Kontext: Input-Sanitization + Tool-Whitelist + Post-Validatoren + HITL + Monitoring.

Toxic Flow Analysis: Tool-/Datenfluss als Graph modelliert; gefährliche Pfade (untrusted → sensitive → externe Senke) statisch identifiziert. Inspiriert von Taint-Analyse. ThoughtWorks Tech Radar Vol. 34.

OWASP Top 10 LLM (2025): u. a. LLM01 Prompt Injection, LLM06 Excessive Agency, LLM07 System Prompt Leakage, LLM08 Vector & Embedding Weaknesses, LLM10 Unbounded Consumption.

Glossar · Sicherheit · Reale Vorfälle

Drei Lehrstücke 2025.

CVE-2025-53773

GitHub Copilot RCE via Prompt-Injection (Aug 2025). Injection schreibt chat.tools.autoApprove: true in .vscode/settings.json („YOLO-Mode") und führt beliebige Shell-Commands ohne User-Approval aus. Wormable.

CamoLeak (CVE-2025-59145)

GitHub Copilot Chat (CVSS 9.6, Disclosure Okt 2025). Prompt-Injection in PR-Beschreibungen schleust private Source-Code-/Secret-Inhalte zeichenweise über GitHubs Camo-Bild-Proxy aus, vorbei an der CSP. Patch: Bild-Rendering deaktiviert, 14. Aug 2025.

Postmark-MCP

Erster bekannter malicious MCP server in the wild (npm, Sep 2025). 15 Versionen unauffällig, dann v1.0.16 mit Einzeile-Backdoor: jede Mail still per BCC an phan@giftshop.club. Lehrstück für MCP-Supply-Chain-Risiko.