Zeitraum
Zeitraum folgt · 10 Wochen
Auftraggeber
Liquid Beans Café, Bietigheim-Bissingen

Kennzahlen

automatisierte Tests
816
Antwortzeit p95 bei 500 ms Vorgabe
< 70 ms
Einzelberechtigungen
99
Fachmodule in einem Deployment
10

Kontext

Das Liquid Beans Café in Bietigheim-Bissingen ist ein Gastronomiebetrieb mit Öffnungszeiten an sieben Tagen in der Woche — und damit mit Schichten, die geplant, erfasst und abgerechnet werden müssen. Für den Betrieb hatte ich vorher bereits die Website umgesetzt. Die zweite Anfrage kam aus einer ganz anderen Richtung — nicht Sichtbarkeit, sondern Organisation.

Dienstpläne, erfasste Arbeitszeiten und die monatliche Aufbereitung für das Lohnbüro liefen über Tabellen. Das funktioniert, solange eine Person den Überblick behält. Es hört auf zu funktionieren, sobald Pausenregeln, Höchstarbeitszeiten und Korrekturen nachvollziehbar sein müssen.

Problem

Drei Anforderungen standen gegeneinander:

  • Rechtssicherheit. Pausen und Höchstarbeitszeiten folgen dem Arbeitszeitgesetz. Eine Tabelle rechnet, was man ihr sagt — sie widerspricht nicht, wenn eine Schicht die Grenze überschreitet.
  • Nachvollziehbarkeit. Wer hat wann welche Zeit geändert? Ohne Protokoll ist eine Korrektur im Nachhinein nicht von einem Fehler zu unterscheiden.
  • Übergabe nach außen. Das Lohnbüro braucht die Daten in einem Format, das es direkt verarbeitet. Ein Fehler dort fällt nicht im Café auf, sondern beim Steuerberater — und dann rückwirkend für einen ganzen Monat.

Dazu kam eine praktische Bedingung: Der Bestand lag in Excel und musste übernommen werden, ohne dass unklare Zeilen stillschweigend falsche Werte erzeugen.

Lösung

Ein modularer Monolith statt verteilter Dienste

Die interessanteste Entscheidung des Projekts war eine Strukturfrage. Zehn Fachdomänen — darunter Dienstplanung, Zeiterfassung, Berechtigungen, Exporte, Import und Auskunft — ließen sich als getrennte Dienste bauen. Ich habe sie in ein Deployment gelegt, intern aber als eigenständige Module mit klaren Grenzen geschnitten.

Verworfen habe ich Microservices, und zwar aus einem einfachen Grund: Bei einem Betrieb dieser Größe übersteigt die Betriebskomplexität verteilter Dienste ihren Nutzen. Getrennte Deployments, Netzwerkaufrufe zwischen Modulen und verteilte Transaktionen lösen Skalierungsprobleme, die ein Café nicht hat — und erzeugen Fehlerbilder, die es dann plötzlich hat. Die Modulgrenzen bleiben trotzdem erhalten: Sollte ein Teil je herausgelöst werden müssen, ist der Schnitt schon gemacht.

Berechtigungen als Datenmodell

Rollen allein reichen nicht, sobald verschiedene Aufgaben verschiedene Rechte brauchen. Das System kennt 99 Einzelberechtigungen, aus denen sich Rollen zusammensetzen. Das klingt nach viel, ist aber der Unterschied zwischen „darf Dienstpläne sehen" und „darf fremde Zeiten korrigieren" — und genau diese Unterscheidung verlangt der Audit-Trail.

Recht und Protokoll im Code

Die Pausen- und Höchstarbeitszeitlogik folgt dem Arbeitszeitgesetz und steht im Code, nicht in einer Dokumentation. Jede Änderung an erfassten Zeiten landet in einem lückenlosen Audit-Trail. Eine DSGVO-Auskunft ist ein Knopfdruck und liefert ein ZIP-Archiv — Datenschutz als Eigenschaft der Architektur, nicht als Prozess, den jemand erinnern muss.

Import mit Quarantäne

Der Excel-Importer übernimmt den Bestand, aber nicht blind: Zeilen, die sich nicht eindeutig zuordnen lassen, landen in einer Quarantäne und warten auf eine Entscheidung. Ein Import, der Unklares stillschweigend übernimmt, verlagert den Fehler nur in die Zukunft.

Stack

Komponente Technologie Begründung
Backend Laravel Ausgereifte Queue-, Policy- und Test-Werkzeuge für ein Datenmodell mit 56 Tabellen
Frontend Vue.js mit Inertia Interaktive Dienstplanung ohne separate API-Schicht
Architektur Modularer Monolith Zehn Fachmodule, ein Deployment — Modulgrenzen ohne Netzwerkgrenzen
Exporte PDF, XLSX, DATEV-EXTF Das Lohnbüro verarbeitet die Daten ohne Zwischenschritt
Qualität 816 automatisierte Tests Schwerpunkt auf den Exportformaten

Ergebnis

  • 816 automatisierte Tests, mit dem Schwerpunkt auf den Exportformaten
  • Antwortzeit p95 unter 70 Millisekunden — die Zielvorgabe lag bei 500
  • 10 Fachmodule, 56 Tabellen, 99 Einzelberechtigungen in einem Deployment
  • Exporte als PDF, XLSX und DATEV-EXTF
  • DSGVO-Auskunft als ZIP auf Knopfdruck, lückenloser Audit-Trail
  • Umgesetzt in zehn Wochen

Was ich daraus gelernt habe

816 Tests sind kein Selbstzweck, und sie sind auch nicht gleich verteilt. Der Schwerpunkt liegt auf den Exporten, weil deren Fehler das Haus verlassen: Ein falsch formatierter DATEV-Export fällt erst beim Steuerberater auf und betrifft dann einen ganzen Monat. Testaufwand gehört dorthin, wo ein Fehler am spätesten und am teuersten sichtbar wird — nicht dorthin, wo er sich am leichtesten schreiben lässt.

Firmenprojekt? Projekte für Unternehmen laufen über twentyonepixels — dort gibt es Leistungen, Konditionen und Referenzen. twentyonepixels.de