Methode · So bauen wir Systeme

Wir beweisen, dass der Code funktioniert.

Die meisten Agenturen hoffen, dass ihr Code funktioniert. Wir betreiben mathematische Verifikation, Drift-Erkennung zwischen Spec und Code und 8+ destruktive Tests pro Funktion — bevor eine einzige Zeile in Produktion geht. Deshalb geraten unsere Systeme nicht um drei Uhr nachts in Panik.

Pipeline · Spec → Allium → Plan → Impl → Playwright → TLA+
Verifikation
TLA+ formal · Allium-Drift · Playwright destruktiv
Stack
.NET · ASP.NET Core · React · Blazor · TypeScript · SQL Server · Postgres · SQLite · Docker Swarm · Azure · Semantic Kernel
Testabdeckung
1:1 funktional + 8 destruktive pro Oberfläche
KI-unterstützt
Claude Code · Spec-Register · Auto-Hooks
Im Betrieb
6 Systeme live auf live4.se · alle Demo-offen

"Wir arbeiten agil" ist 2026 das Nichtssagendste, was man über Softwareentwicklung sagen kann. Alle sagen es. Niemand kann zeigen, was es bedeutet. Es ist kein Prozess — es ist eine Plakette, die man nach dem Daily Stand-up an die Wand hängt.

Unsere Methode lässt sich prüfen. Sie hinterlässt Artefakte — Spec-Dateien, Allium-Berichte, TLA+-Modelle, Playwright-Berichte — die du lesen und gegen die du argumentieren kannst. Sie fängt Race Conditions ab, bevor sie in Produktion kommen, Drift zwischen Spezifikation und Implementierung, bevor sich jemand fragt, warum Code und Doku nicht mehr übereinstimmen, und unlogische Zustandsübergänge, bevor ein Endnutzer sie für uns entdeckt.

Die Pipeline ist kein Geheimnis. Sie läuft bei jeder nicht-trivialen Änderung in jedem System, das wir betreiben. Unten steht, was jede Phase tut, warum sie existiert und was das in der Praxis bedeutet.

Wir bauen nicht mehr Features, als der Kunde braucht. Das, was wir bauen, hat beweisbare Logik dahinter.

Die Pipeline in sechs Phasen.

Jede Phase erzeugt Artefakte, die Menschen lesen und Maschinen verifizieren können. Kein Phasenüberspringen, keine Abkürzungen. Die Phasen laufen in Reihenfolge bei jeder nicht-trivialen Änderung — egal ob es ein neues Feld in einem Formular oder ein neues Domänenmodell ist.

Phase 01

Spezifikation.

Wir schreiben, was das System tun soll, bevor wir das Wie schreiben. Eine Spec-Datei pro Feature, geprüft, bevor eine Codezeile entsteht. Plus eine Klärungsrunde, die Lücken fängt, die sonst in Produktion auftauchen würden.

/specify · /clarify
Phase 02

Formelle Spec (Allium).

Die Spec wird in Allium formalisiert — einer Befragungssprache für Spezifikationen. Inkonsistenzen und Mehrdeutigkeiten tauchen vor der Implementierung als offene Fragen auf. Später wird die Spec mit dem Code verglichen, um Drift zu erkennen.

/allium:elicit
Phase 03

Plan + Aufgaben.

Die Spec wird in einen Plan und eine abhängigkeitsgeordnete Aufgabenliste zerlegt. Danach läuft eine Analysephase, die alle empfohlenen Maßnahmen automatisch anwendet. Die Implementierung beginnt gegen einen voll instrumentierten Bauplan, nicht gegen einen Haufen Ideen.

/plan · /tasks · /speckit.analyze
Phase 04

Implementierung.

Code wird gegen den Plan geschrieben — nicht im abstrakten Sinn, sondern Aufgabe für Aufgabe. Backend-first als Prinzip, nicht als Slogan: alle Autorisierung, Audit, Soft-Delete und Idempotenz sind server-seitig enforced. Das Frontend ist eine dünne Ansichtsschicht.

.NET · React · EF Core · SSE
Phase 05

Browser-Tests.

1:1 funktionale Abdeckung — zwölf Funktionen ergeben zwölf Tests. Plus acht destruktive Tests pro Oberfläche: XSS, SQL-Injection, Auth-Bypass, Race Conditions, ungültige Eingaben, Grenzwerte. Alle in Playwright. Kein "Happy Path".

Playwright · Funktional + destruktiv
Phase 06

Formelle Verifikation (TLA+).

Zustandsmaschinen werden in TLA+ modelliert und Invarianten mathematisch bewiesen. Der TLC-Modellprüfer findet Race Conditions, Deadlocks und Zustände, an die niemand gedacht hat. Was aus dieser Phase kommt, ist kein Test, der "bestanden" hat — es ist ein Beweis.

TLA+ · TLC · Invarianten

Was die meisten tun. Was wir tun.

Ein ehrlicher Vergleich mit dem, was wir vorfinden, wenn wir ein System übernehmen, das jemand anderes gebaut hat. Kein Angriff — nur eine Kalibrierung, was "produktionsreif" tatsächlich heißt.

Test

Manueller Durchklick vor Release.

Übliche Agentur. Jemand klickt sich durchs System, sieht nichts explodieren und drückt Deploy. Edge Cases entdeckt der Kunde.

Manuell · Wunschdenken
Test

1:1 funktional + 8 destruktiv.

Wir. Jede implementierte Funktion hat mindestens einen Playwright-Test. Plus acht destruktive Tests pro Oberfläche, die das System auf die sechs häufigsten Arten zu brechen versuchen.

Playwright · Nachvollziehbar
Spec

Die Spec lebt in einem Confluence-Dokument.

Übliche Agentur. Die Spec wird einmal geschrieben, dann driftet sie vom Code weg. Sechs Monate später kann niemand mehr beantworten, warum es so funktioniert.

Drift · Vergessen
Spec

Allium-Drift zwischen Spec und Code.

Wir. Spec und Code werden automatisch verglichen. Drift erscheint als offene Frage, nicht als Vermutung. Die Spec ist Quellcode — versioniert, geprüft, immer synchron.

Allium · Drift-Erkennung
Zustand

Race Conditions werden in Produktion entdeckt.

Übliche Agentur. Eine Zustandsmaschine wird aufs Whiteboard gemalt, dann aus dem Stegreif codiert. Race Conditions findet ein Pechvogel-Nutzer an einem Donnerstagnachmittag.

Whiteboard · Hoffnung
Zustand

TLA+ beweist Invarianten.

Wir. Zustandsmaschinen werden formal modelliert, Invarianten bewiesen. TLC findet das Cluster von Zuständen, das die Logik nicht abdeckt — bevor es zum Produktionsvorfall wird.

TLA+ · Beweisbar

Der Stack — was wir wählen und warum.

Wenige technische Entscheidungen, einmal getroffen, zehn Jahre vertieft. Wir wechseln den Stack nicht jeden Sprint. Wir wechseln, wenn es einen echten Grund gibt — und begründen das dann schriftlich.

Backend

.NET · ASP.NET Core.

Eine reife, schnelle, kostenlose Runtime mit starkem Typsystem. EF Core mit SaveChanges-Interceptors, die den Audit-Trail zentral erfassen — kein Code kann sich vorbeischleichen. Wir schreiben .NET seit Version 1.1.

.NET · EF Core · ASP.NET
Frontend

React · Blazor wo es passt.

React als Default für neue Frontends — Server Components, Suspense, native Streaming. Blazor WASM für PWAs, wo End-to-End-C# es wert ist. Niemals SPA-Religion: wir entscheiden pro System.

React · Blazor WASM · TypeScript
Datenbank

SQLite. Auch in Produktion.

SQLite auf NFS fasst mehrere Projekte ohne tenant_id-Geplänkel. Backups sind Dateien zum Zippen. Keine Betriebskosten für einen separaten Datenbankserver. Wir wechseln zu PostgreSQL an dem Tag, an dem die Last es verlangt — selten früher.

SQLite · WAL · NFS
KI

Selbst gehostetes LLM mit Fail-Open.

Ein lokales Modell im Docker-Swarm-Cluster. Ist die KI weg, läuft das System ohne Blocker weiter — Auto-Kategorisierung wird manuell, nichts stürzt ab. GDPR-freundlich, weil Daten den Cluster nie verlassen.

Lokales LLM · Semantic Kernel · RAG
Betrieb

Docker Swarm auf Azure.

Wir besitzen die ganze Kette: Architektur, Datenbank, Frontend, Betrieb. Eigener Swarm-Cluster auf live4.se. Keine Managed Services mit nebulöser Preisgestaltung. Du weißt genau, was läuft und wo.

Docker Swarm · Azure · live4.se
Werkzeuge

Claude Code · Spec-Register.

KI-unterstützte Entwicklung mit deterministischen Hooks. Spec-Register als Quelle für das Nächste, was gebaut wird. Pipeline-Hooks, die Feature-Arbeit ohne Spec blockieren. Die KI folgt einer Methode, die wir niedergeschrieben, geprüft und versioniert haben.

Claude Code · Hooks · Subagents

Die volle Kompetenzbreite.

Wir wählen wenige Technologien pro System — aber die Liste dessen, was wir tatsächlich beherrschen, ist länger. 25+ Jahre Lieferungen geben eine breite Basis, auf die wir uns stützen können, wenn das Problem nicht zur Standardlösung passt.

Backend

Das .NET-Ökosystem.

.NET 6–10 · C# · ASP.NET Core · .NET Aspire · EF Core · Dapper · MediatR · Quartz.NET · SignalR · gRPC · GraphQL · REST · Clean Architecture · CQRS · DDD · Multi-Tenant SaaS · Microservices · Node.js

Frontend

Web und Mobil.

TypeScript · JavaScript · React · React Native · Expo · Next.js · Vue · Svelte · Blazor WASM · Blazor Server · HTMX · Tailwind · Bootstrap · jQuery · HTML · CSS · WordPress · Android (Java) · iOS (Obj-C)

Datenbanken

Relational, Dokument, Suche.

SQL Server · T-SQL · PostgreSQL · pgvector · pg_trgm · MySQL · MongoDB · Redis · SQLite · Elasticsearch · Index-Optimierung · Backup-Strategien · Execution Plans · Schema-Migrationen

KI & formale Verifikation

Agenten, RAG, beweisbare Logik.

Semantic Kernel · Microsoft Agent Framework · Azure OpenAI · Ollama · lokale LLMs · Claude Code · Cursor · GitHub Copilot · RAG · Embeddings · hybride Suche (pgvector + pg_trgm) · TLA+ · Allium · Spec-getriebene Entwicklung · Custom Skills

Cloud (Azure)

Dienste, die wir nutzen.

App Service · Functions · Container Apps · Service Bus · Event Grid · SQL · Storage · Key Vault · API Management · Entra ID · Monitor · App Insights

Container & Infra

Betrieb, Virt, Netzwerk.

Docker · Docker Swarm · Docker Compose · Kubernetes · Linux (Ubuntu/Debian) · Windows Server · Active Directory · DNS · IIS · Nginx · Virtualisierung · GPU-Farm

CI/CD & Test

Pipelines und Qualitäts-Gates.

Azure DevOps · GitHub Actions · BitBucket · Bicep (IaC) · xUnit · NUnit · Playwright · Testcontainers · k6-Stresstests · Code-Review · Pull Requests · Git/GitHub

Sicherheit & Identität

Auth, GDPR, Barrierefreiheit.

OAuth2 · OpenID Connect · JWT · WebAuthn · Passkeys · GDPR · Zero Trust · Audit-Trail · Soft-Delete · Idempotency-Keys · WCAG 2.1 AA

Integrationen & Daten

Zahlung, Kommunikation, Data Governance.

Stripe · Swish · Twilio · Mailjet · Google APIs · Fortnox · SCORM · OpenTelemetry · Prometheus · Grafana · Data Governance · Datenkatalog · Metadaten-Management · Begriffsmodellierung · Datenqualität

Die lange Fassung.

Für alle, die die technische Tiefe wollen — hier steht, was jede Phase wirklich produziert, warum sie existiert und wie sie an die nächste anschließt. Im Groben: die Pipeline ist eine Kette von Artefakten, in der jede Phase ein Dokument aus der vorigen Phase übernimmt und ein neues Dokument produziert, das die nächste Phase lesen kann. Keine mündlichen Übergaben. Kein "ich glaube, darüber haben wir am Mittwoch im Stand-up gesprochen".

Allium — Drift als Datenpunkt.

Allium ist eine Befragungssprache: du schreibst eine Spezifikation, dann läuft ein Elicitation-Durchgang, der Lücken, Mehrdeutigkeiten und Inkonsistenzen findet. Er produziert offene Fragen, die beantwortet werden müssen, bevor es weitergeht. Später vergleicht ein Distillation-Durchgang den fertigen Code mit der Spec — Drift erscheint in drei Kategorien: spezifiziert-aber-nicht-implementiert, implementiert-aber-nicht-spezifiziert und Verhaltensdrift. Jeder Eintrag bekommt eine individuelle Entscheidung: jetzt fixen, defer (in Spec tracken) oder dismiss mit Begründung. Keine Gruppenbeschlüsse à la "machen wir später" — jeder Fund hat einen Verantwortlichen und ein Datum.

TLA+ — Beweise, keine Tests.

Ein Test, der besteht, zeigt, dass eine Ausführung funktioniert hat. Er sagt nichts über die Ausführungen, die du nicht getestet hast. TLA+ modelliert das System als Zustandsraum und führt eine erschöpfende Begehung durch — der TLC-Modellprüfer probiert jede mögliche Ereignissequenz aus und findet die Zustände, in denen Invarianten brechen. Für Fallbearbeitung: kann ein Fall gleichzeitig geschlossen und in Bearbeitung sein? Für SSE: was passiert, wenn der Client mitten in einem Update neu verbindet? Für Idempotenz: was passiert, wenn derselbe Idempotency-Key in zwei gleichzeitigen Requests auftaucht? TLC antwortet mathematisch, nicht wahrscheinlichkeitsbasiert.

Destruktive Tests — sechs Kategorien.

Funktionale Tests verifizieren, dass der Happy Path funktioniert. Destruktive Tests verifizieren, dass das System nicht umfällt, wenn jemand es zu brechen versucht. Wir fahren mindestens acht destruktive Szenarien pro Oberfläche, verteilt auf sechs Kategorien.

Eingabevalidierung bombardiert Felder mit überlangen Strings, ungültigen Zeichen, Null und leeren Werten. Autorisierung versucht, Ressourcen zu lesen und zu schreiben, die der Nutzer nicht besitzt. Die Injection-Kategorie schiebt XSS in Textfelder und SQL-Injection in Suchparameter. Race Conditions zwingen zwei Clients dazu, dieselbe Ressource in derselben Sekunde zu ändern. Grenzwerte trainieren Maximallängen, Maximalanzahlen und Pagination auf der letzten Seite. Zustandskorruption schickt Änderungen in falscher Reihenfolge oder gegen bereits gelöschte Ressourcen.

Nichts davon ist theoretisch. Jede Kategorie hat in Produktionssystemen, die wir gebaut haben, echte Bugs gefangen — bevor sie ausgeliefert wurden.

KI-unterstützte Entwicklung — ohne KI-Religion.

Claude Code wird als Werkzeug genutzt, nicht als Ersatz. Die obige Pipeline ist nicht KI-generiert — sie ist dokumentiert, versioniert und über deterministische Hooks enforced. Die Hooks blockieren Feature-Arbeit ohne Spec, fordern Klärung vor Plan, fahren Allium-Elicitation vor der Implementierung und verweigern die Freigabe eines Features ohne sowohl Playwright- als auch TLA+-Validierung. Die KI folgt der Methode — sie erfindet sie nicht. Das Ergebnis: KI-Geschwindigkeit mit menschlicher Prüfung bei Architekturentscheidungen.

Diese Methode dauert in der ersten Woche länger. Sie spart Monate, wenn das System ein Jahr alt ist.

Wir sind nicht die richtige Wahl für alles.

Wir melden uns mit einer Einschätzung der Passung — und wenn wir nicht die Richtigen sind, sagen wir es offen.

Schreib uns kurz, was ihr bauen wollt.

Schreib uns