pushState statt Seitennavigation), die BITV-2.0-Barrierefreiheitsvorgaben
und die Behandlung komplexer Formulare ohne Wizard. Abschließend werden die bekannten
Einwände und ihre Mitigationen dokumentiert.
Eine Sachbearbeiterin in der IHK-Carnet-Verwaltung bearbeitet 60–100 Vorgänge pro Tag über heterogene Entitätstypen hinweg — Firmen, Carnets, Prüfungen — in mehreren Kammerbezirken. Traditionelle Enterprise-UIs erzwingen Navigation zwischen diesen Typen. Die Kosten liegen nicht im Klick. Sie liegen in der Neuorientierung nach der Ankunft: Jeder Bildschirmwechsel zwingt die Sachbearbeiterin, drei Fragen zu beantworten — Wo bin ich? Was kann ich hier tun? Wie komme ich zurück? Bei hohem Volumen summiert sich dieser Neuorientierungsaufwand auf Stunden verlorener Produktivität pro Woche.
| System | Muster | Kosten |
|---|---|---|
| SAP GUI | 7400+ Transaktionscodes → eigene Bildschirme | Sachbearbeiterinnen memorieren Pfade statt zu arbeiten. Einarbeitungszeit: Monate. |
| ServiceNow | Liste → Detail → Zugehörige Liste → Zurück | 3–5 Seitenladungen pro Ticket. Warteschlangenbewusstsein geht beim Detail-Arbeiten verloren. |
| Oracle Forms | Menü → Formular → Reiter → Unterformular → Speichern → Zurück | 4–6 Navigationsschritte je CRUD-Operation. Keine periphere Wahrnehmung des Warteschlangenstands. |
| Jira | Board → Issue → Sub-task → Zurück zum Board | Board-Kontext geht im Issue-Detail verloren. |
Das Designziel ist null Neuorientierungsaufwand: ein fixes Drei-Zonen-Layout, dessen räumliche Stabilität Orientierungsfragen durch das periphere Sehen beantwortet — ohne aktives Lesen.
Das Dashboard ist eine Seite mit drei vertikal gestapelten Zonen. Jede Zone beantwortet eine kognitive Frage, die über alle Aufgaben, alle Entitätstypen und alle Erfahrungsstufen hinweg stabil bleibt. Die Zonen bewegen sich nie, verschwinden nie und ändern ihr Layout nie.
| Zone | Kognitive Frage | Stabilitätsgarantie |
|---|---|---|
| Zone 1 — Scope-Leiste | „Wer bin ich? Was kann ich sehen?" | Scrollt nie, verschwindet nie, ändert Layout nie |
| Zone 3 — Der Strom | „Was ist passiert? Was wartet auf mich?" | Immer über Zone 2; scrollt nach oben; unten = jetzt |
| Zone 2 — Kommandofeld | „Was tue ich gerade?" | Immer unten verankert, immer dasselbe Interaktionsmodell |
Designvorbild: Das Bloomberg Terminal erreicht dasselbe mit einem fixen Vier-Panel-Layout, das sich über Tausende verschiedener Datenansichten nie ändert. Die Panels sind der kognitive Anker; der Inhalt darin wechselt. Unsere drei Zonen erfüllen dieselbe Funktion mit einfacherer Geometrie.
Die oberste Schicht jedes Verwaltungssystems ist nicht das Datenmodell oder die API — es ist das mentale Modell, das die Sachbearbeiterin an den Schreibtisch mitbringt. Eine Sachbearbeiterin denkt in Vorgängen, nicht in Datenbankzeilen. Sie denkt in erlaubten Handlungen, nicht in CRUD-Operationen. Ein System, das sein Datenmodell der Sachbearbeiterin direkt ausliefert, ist gescheitert, bevor die erste Interaktion stattfindet.
| Konzept | Bedeutung für die Sachbearbeiterin | Falsches Systemäquivalent |
|---|---|---|
| Vorgang | Ein Fall mit einer Geschichte, einem aktuellen Zustand und ausstehenden Aktionen | Eine Datenbankzeile |
| Zuständigkeit | Wofür ich verantwortlich bin und worauf ich handeln darf | Eine Berechtigungsmaske |
| Arbeitsschritt | Eine diskrete Aktion, die einen Vorgang voranbringt und eine Spur hinterlässt | Ein Formular-Submit |
Das zentrale Kommandofeld ist kein Suchfeld. Es ist die Kommandozeile der Sachbearbeiterin — ein direkter Ausdruck ihrer Absicht über den Domänenobjektgraphen. Jedes Token verengt gleichzeitig die Entitätsmenge und aktualisiert die verfügbare Aktionsmenge. Die Sachbearbeiterin sieht keine Ergebnisseite — sie sieht eine sich kontinuierlich schärfende Absicht.
Eingabe Was das System zeigt ────────────────────── ────────────────────────────────────────────────────── „g" → Günther Maschinenbau AG · Gauss Metallbau GmbH „gün" → Günther Maschinenbau AG [Entität aufgelöst] „gün car" → Günther Maschinenbau AG › Carnet #2024-00456 [Relation gefolgt] „gün car ver" → … AKTION: Zu anderer Firma verschieben ↵ [Methode gefunden] „gün car ver mül" → … verschieben → Müller Werkzeugbau GmbH [Parameter aufgelöst] [ENTER] → Arbeitsschritt ausgeführt · Strom aktualisiert
Aktionen werden zur Anfragezeit gefiltert, nicht zur Renderzeit. Eine Sachbearbeiterin im Kammerbezirk Aachen sieht keinen ausgegrauten „Limit ändern"-Button. Sie sieht den Button gar nicht. Die UI ist ein berechtigungs-gesteuerter Arbeitsbereich, kein Berechtigungsanzeigesystem.
Eine Sachbearbeiterin, die noch nicht weiß, dass es Carnets gibt, wird das Wort
carnet nicht eintippen. Um diese Lücke zu schließen, ohne ein Navigationsmenü
einzuführen, zeigt das Kommandofeld im Leerzustand Kategorie-Chips als
anklickbare Maus-Affordanzen:
[ Carnets ] [ Firmen ] [ Prüfungen ] [ Verwaltung ]
Ein Klick auf [Carnets] entspricht dem Eintippen von carnet.
Das Token-Modell und das Chip-Modell sind derselbe Mechanismus; die Chips sind ein
nullvokabular-Einstiegspunkt für den ersten Arbeitstag. Erfahrene Sachbearbeiterinnen
überspringen die Chips und tippen direkt — die Oberfläche bestraft keine Expertise und
blockiert keine Anfänger.
Zone 3 ist die Geschichte der Sitzung und aller Ereignisse auf Entitäten im Zuständigkeitsbereich. Die räumliche Metapher ist der Chat-Verlauf: das am tiefsten verankerte Raummodell der Arbeitnehmerschaft der 2020er Jahre. Das Kommandofeld ist die Nachrichteneingabe, unten verankert. Die Geschichte fließt darüber nach oben. Der jüngste Austausch ist direkt über dem Eingabefeld.
Zwei Sprecher, zwei visuelle Ausrichtungen:
Kollegin- oder Systemautomationsereignisse erscheinen als Aktion:-Bubble ohne vorangehendes Sie: — genau wie das Empfangen einer Nachricht in einem Gruppen-Chat. Nach einem Telefonat sieht die Sachbearbeiterin sofort, was sich verändert hat — durch Blick auf den unteren Bereich des Stroms.
Der Strom enthält zwei semantisch verschiedene Eintragstypen:
| Typ | Darstellung | Sichtbarkeit | Kassenbuch-Vertrag |
|---|---|---|---|
| Vorgangsstrahl-Eintrag | Aktion:-Bubble (rechts) | Alle Kolleginnen, Revisionsprotokoll | Ja — append-only, irreversibel, attribuiert |
| Arbeitsstrahl-Eintrag | Sie:-Bubble (links) | Nur die eigene Sitzung | Nein — privates Shell-History-Äquivalent |
Die Visualisierung macht die Grenze sichtbar: Sie:-Bubbles tragen ein Schloss-Icon und
beim Hover den Hinweis „Nur für Sie — nicht im Protokoll." Aktion:-Bubbles tragen
immer ein Quell-Badge (Sachbearbeiterin-Name, [System], [Portal],
[Allianz]). Die Unterscheidung ist visuell, nicht räumlich — beide Typen leben
im selben Strom, weil sie zeitlich zusammengehören.
Der Strom zeigt die persönliche Sitzung. Ein Vorgang hat jedoch einen viel breiteren Lebenszyklus: Kundenportal-Einreichungen, Kolleginnenaktionen, externe Partnerantworten, Systemautomationen. Diese vollständige Geschichte lebt in der Vorgangshistorie — einem Seitenleisten-Panel, das sich öffnet, wenn eine Entität ausgewählt wird.
| Ansicht | Beantwortete Frage | Scope |
|---|---|---|
| Strom (Zone 3) | „Was habe ich getan?" | Meine Sitzung, alle Entitäten |
| Vorgangshistorie-Panel | „Was ist mit dieser Entität passiert?" | Eine Entität, vollständiger Lebenszyklus, alle Akteure |
Das Panel öffnet sich als Seitenleiste und überlagert den linken Teil des Stroms, verdeckt aber nicht das Kommandofeld. Es ist keine Modal-Ansicht und keine eigene Seite.
Der Arbeitsstrahl ist der persönliche Befehlspfad der Sachbearbeiterin. Klassisches Undo (Strg+Z) arbeitet in strenger umgekehrter Reihenfolge: Aktion 5 muss rückgängig gemacht werden, um Aktion 3 zu korrigieren — auch wenn Aktion 4 völlig unabhängig war. Das Arbeitsstrahl-Modell verwendet stattdessen git reset mit automatischer kausaler Abhängigkeitsanalyse.
Die Sachbearbeiterin klickt eine frühere Sie:-Bubble. Das System bewertet, welche nachfolgenden Aktionen davon abhingen (gleiche Entität, oder Ausgabe-als-Eingabe) und welche unabhängig waren. Unabhängige Aktionen überleben den Reset automatisch. Nur kausal abhängige Aktionen werden rückgängig gemacht. Der Reset selbst ist ein Kassenbuch-Eintrag — nichts wird stillschweigend gelöscht.
| Klassisches Strg+Z | Arbeitsstrahl-Reset |
|---|---|
| Strenge umgekehrte Reihenfolge — muss 5, 4, 3 rückgängig machen, um 3 zu korrigieren | Direkter Sprung zu einem beliebigen Eintrag — unabhängige Arbeit bleibt erhalten |
| Keine Vorschau, was rückgängig gemacht wird | Bestätigungspanel zeigt genau, welche Aktionen abhängig sind |
| Still — kein Protokolleintrag, dass Undo stattfand | Prüfbar — der Reset selbst ist ein Kassenbuch-Eintrag |
| Vernichtet Zwischenzustände | Rückgängig gemachte Einträge werden im Reflog für Compliance aufbewahrt |
Das Versprechen des Kommandofelds: Jeder Tastenanschlag liefert eine sichtbare Vorschau innerhalb ~50 ms — unabhängig von der Backend-Round-Trip-Zeit. Das ist nur erreichbar, wenn der Client niemals eine Anfrage beim Drücken einer Taste auslöst. Alle sichtbaren Vorschläge kommen aus Daten, die bereits vor dem Tippen eingetroffen sind. Die Aufgabe des Backends ist es, vorherzusagen, was die Nutzerin als Nächstes braucht, und es vorab zu liefern.
| Auslöser | Strategie | Mechanismus |
|---|---|---|
| Sitzungsstart | Globaler Entitätsindex | Kompakter In-Memory-Index aller Firmen/Carnets/Prüfungen — sämtliches Token-Matching läuft lokal, null Netzwerklatenz je Tastenanschlag |
| Tippen, Top-Treffer stabil >150 ms | Spekulativer Prefetch | Anchor-Payload des Top-Treffers wird abgerufen, bevor Leerzeichen gedrückt wird; Abbruch bei Trefferänderung |
| Entitäts-Token fixiert (Leerzeichen) | Warm Cache | Alle Aktionen, verknüpfte Objekte und Parameter-Kandidaten in einem Round-Trip — Client ist bereit, bevor das Aktions-Token getippt wird |
| Zone 3 / Offene Vorgänge gerendert | Viewport-Prefetch | Anchor-Payloads aller sichtbaren Entitäten werden gebündelt abgerufen; Klick auf eine Zeile füllt ein bereits gecachtes Token vor |
| Bestätigungspanel muss erscheinen | Mitgepacktes Payload | Bestätigungstext und Validierungsergebnisse stecken im Anchor-Payload — kein zweiter Request nötig |
Keine Anfragen bei Tastenanschlägen auslösen. Debounce reicht nicht — das Ziel ist null Tastenanschlag-Anfragen. Das Netzwerk bewegt sich nur, wenn die Entität aufgelöst wird (Leerzeichen), nicht beim Tippen.
Eine Single-Screen-Anwendung, die die URL aufgibt, verliert Teilbarkeit, Browser-History,
Back-Button-Verhalten und Testadressierbarkeit. All das setzt keine Seitennavigation voraus
— es setzt history.pushState() voraus.
Das Design verpflichtet sich zum folgenden URL-Vertrag:
| Zustandsübergang | URL-Aktualisierung |
|---|---|
| Entität im Kommandofeld fokussiert | /vorgang/{typ}/{id} z.B. /vorgang/carnet/2024-00456 |
| Inline-Panel geöffnet (Formular oder Detail) | /vorgang/{typ}/{id}/{aktion} z.B. /vorgang/carnet/2024-00456/inhaber-wechseln |
| Vorgangshistorie-Seitenleiste geöffnet | /vorgang/{typ}/{id}/historie |
| Vollbreites Panel (Zone 3 verborgen) | /vorgang/{typ}/{id}/{panel} z.B. /vorgang/carnet/2024-00456/warenpositionen |
| Panel oder Seitenleiste geschlossen | Kehrt zur Entitäts-URL zurück |
pushState feuert bei jedem Übergang. Es feuert kein Navigation-Event — der
Bildschirm wird nie entladen. Das popstate-Event wird abgefangen und als
Zustand-Wiederherstellung innerhalb des aktuellen Bildschirms behandelt: Kommandofeld und
Zonen rekonstruieren sich aus den URL-Parametern ohne Neuladen.
Eine Sachbearbeiterin kann einen Vorgang durch Kopieren der Adressleiste oder per
Kopier-Button am Entitäts-Header-Chip teilen. Die Browser-History spiegelt
Entitäts-Übergänge wider — Supervisorinnen können Sitzungen rekonstruieren. Support
kann Fehlermeldungen aus einer URL reproduzieren. Automatisierte Tests navigieren
direkt zu /vorgang/carnet/2024-00456 — kein Token-Tippen pro Test nötig.
Der Back-Button stellt den vorherigen Entitätszustand wieder her, nicht die vorherige Seite.
Dies löst den stärksten strukturellen Einwand gegen das Einzelbildschirm-Modell. Die Wahl ist nicht „ein Bildschirm vs. URLs" — sie ist „ein Bildschirm mit pushState" gegenüber „Multi-Route-SPA mit Seitenübergängen." Beide haben URLs. Nur eines eliminiert den Neuorientierungsaufwand.
Der deutsche öffentliche Sektor ist an die BITV 2.0 gebunden, die WCAG 2.1 AA umsetzt. Eine Kommandopaletten-primäre Oberfläche ist BITV-konform, wenn sie korrekt implementiert wird. Die folgenden Punkte sind erstklassige Anforderungen, keine Nachgedanken:
<input role="combobox" aria-autocomplete="list" aria-expanded aria-owns="suggestion-list">. Die Vorschlagsliste ist ein korrektes role="listbox" mit role="option"-Kindern. Screenreader kündigen die Trefferanzahl und den aktuell markierten Vorschlag bei jedem Tastenanschlag an.<header>, Zone 2 → <main>, Zone 3 → <region aria-label="Vorgangsstrahl">. Screenreader-Nutzerinnen navigieren per Landmark ohne zusätzliche Affordanz.<button>-Elemente, keine Custom-Widgets — Maus- und Screenreader-Einstiegspunkt für Nutzerinnen ohne Token-Vokabular.role="dialog" mit aria-modal="false" und aria-labelledby, das auf das aufgelöste Befehlslabel zeigt. Fokus wechselt beim Öffnen zum ersten Panel-Feld; ESC gibt den Fokus an das Kommandofeld zurück.Der härteste Einwand gegen das Einzelbildschirm-Modell: „Wir haben ein 12-Felder-Carnet-Antragsformular. Das kann man nicht in eine Kommandozeile eintippen." Richtig — und die Antwort ist nicht „12 Tokens tippen." Die Antwort ist, dass komplexe Dateneingabe ein anderer Interaktionsmodus ist, den Zone 2 unterstützt, ohne den Einzelbildschirm-Vertrag zu brechen.
Ein Wizard löst zwei Probleme: Sequenzierung (Felder in einer bestimmten Reihenfolge ausfüllen, weil spätere Felder von früheren Entscheidungen abhängen) und kognitive Portionierung (12 Felder auf einmal überfordern; 3 auf einmal fühlen sich handhabbar an). Beide Probleme sind real. Aber die Lösung des Wizards — ein getrennter mehrseitiger Ablauf mit Weiter/Zurück-Navigation — führt drei neue Probleme ein:
Befehl: firma neu anlegen Zeile 2: ✓ Neue Firma anlegen Unter Zone 2 (expandiertes Panel): ┌─────────────────────────────────────────────────────────────────┐ │ Neue Firma anlegen 1 / 3 │ │ │ │ Firmenname [ ________________________________ ] │ │ Rechtsform [ GmbH ▾ ] │ │ Kammerbezirk [ Aachen ▾ ] │ │ │ │ [TAB → weiter] [ESC Abbrechen] │ └─────────────────────────────────────────────────────────────────┘ Nach TAB auf dem letzten Feld ersetzt das Panel seinen eigenen Inhalt: ┌─────────────────────────────────────────────────────────────────┐ │ Neue Firma anlegen 2 / 3 │ │ ✓ Günther Maschinenbau AG · GmbH · Aachen │ │ │ │ Straße [ ________________________________ ] │ │ Hausnummer [ ____ ] │ │ PLZ [ _____ ] Ort [ __________________ ] │ │ │ │ [TAB → weiter] [SHIFT+TAB ← zurück] [ESC Abbrechen] │ └─────────────────────────────────────────────────────────────────┘
| Komplexität | Muster | Felder | Beispiel |
|---|---|---|---|
| 1 Parameter | Inline-Token (Zustand B/C) | 1 | Limit ändern, Termin verschieben |
| 2–4 Felder | D3-Mini-Formular | 2–4 | Adresse bearbeiten, Ansprechpartner |
| 5–12 Felder, sequenziell | Progressives Inline-Expanding | 5–12, in Abschnitte unterteilt | Firma neu anlegen, Carnet beantragen |
| Räumliches/tabellarisches Layout | Vollbreites Panel (Zone 3 verborgen) | Beliebig | Warenpositionen, Vergleichsansicht |
| >12 Felder, verzweigte Logik | Progressives Expanding + Auto-Entwurf | 12+ | Vollständiger Carnet-Antrag mit Warenprüfung |
Jede Stufe verwendet denselben Tastatur-Vertrag (TAB vorwärts, SHIFT+TAB zurück, ENTER ausführen, ESC beenden), denselben räumlichen Anker (Zone 2 expandiert nach unten, verdrängt nie die Scope-Leiste) und dasselbe Wiederaufnahme-Modell (Tokens bleiben, Entwürfe erscheinen in Offene Vorgänge).
Die Designentscheidung hat Konsequenzen, die akzeptiert werden müssen — sie sind nicht verhandelbar:
einstellungen sprache deutsch.Ein traditioneller Webapplikations-Designer erhebt strukturelle Einwände gegen das Einzelbildschirm-Modell. Die folgende Tabelle klassifiziert jeden Einwand nach dem Grad seiner Lösung.
| Einwand | Mitigation |
|---|---|
| Sachbearbeiterin kann keinen Vorgang per URL teilen | pushState bei Entitätsfokus; Kopier-URL-Button am Entitäts-Header-Chip |
| Back-Button wirft Sachbearbeiterin zur Login-Seite | popstate abfangen; als Zustand-Wiederherstellung im aktuellen Bildschirm behandeln, nicht als Navigation |
| Supervisorin kann Browser-History nicht für Audit nutzen | Folgt aus pushState — Entitäts-Übergänge erscheinen in der History |
| Support kann Bug nicht aus URL reproduzieren | Folgt aus stabilem URL-Schema je Entitätstyp und Zustand |
| Automatisierte Tests können keine Entität direkt adressieren | Navigation zu /vorgang/carnet/2024-00456; Bildschirm stellt diesen Zustand wieder her |
| Vollbreites Panel hat keine URL | pushState bei Panel-Öffnung; Schließen stellt vorherige URL wieder her |
| Einwand | Mitigation |
|---|---|
| Anfängerin weiß nicht, „carnet" zu tippen, um Carnets zu entdecken | Kategorie-Chips im leeren Kommandofeld als Maus-Affordanzen ohne Token-Vokabular |
| Zone 3: Ist dieser Eintrag Revisionsprotokoll oder private Sitzungshistorie? | Visuelle Unterscheidung: Sie:-Bubbles mit 🔒-Icon und Hover-Hinweis „Nur für Sie — nicht im Protokoll"; Aktion:-Bubbles mit Quell-Badge |
| BITV 2.0: Screenreader können Kommandofeld nicht parsen | Implementierung als combobox mit korrekten ARIA-Rollen; Zonen als HTML-Landmarks — BITV-Konformität ist erstklassige Designanforderung (→ §8) |
| Spannung | Ehrliche Position |
|---|---|
| Nicht-Blindtipper sind mit Tokens langsamer als mit Klick-Zielen | Die mausbedienbaren Vorschlagslisten und Kategorie-Chips verringern den Unterschied, aber das Token-Modell bevorzugt Tipperinnen. Akzeptierter Kompromiss für professionelle Hochvolumenarbeit. |
| Keine Nutzerstudien mit echten IHK-Carnet-Sachbearbeiterinnen | Alle Zitierungen sind theoretisch. Das Design muss mit 5 repräsentativen Sachbearbeiterinnen validiert werden, bevor eine Implementierungsverpflichtung eingegangen wird. Dies ist eine offene empirische Frage. |
| Vollbreites Panel (Zone 3 verborgen) ist nominell „ein Bildschirm" | Zone 1 (Scope) bleibt sichtbar; der Vertrag gilt dort. Zone 3 wird unter den Viewport geschoben. Ehrliche Position: der Einzelbildschirm-Anspruch gilt für „Zone 1 immer sichtbar" und „ESC beendet immer" — nicht für simultane Sichtbarkeit aller drei Zonen bei maximaler Komplexität. |
Das Design hat eine strikte Abhängigkeitsreihenfolge. Das UI vor dem Domänenmodell zu bauen, produziert ein UI, das die falschen Abstraktionen eincodiert.
resolve(), actions(user, perms), synonyms, history(). Jeder Entitätstyp implementiert denselben Vertrag.Quellen: ux/foundations/single-screen-rationale.md · ux/foundations/clerk-mental-model.md · ux/foundations/single-screen-counterargument.md · ux/patterns/instant-command-resolution.mdx · ux/screens/sachbearbeiter-dashboard/SCREEN.md