Live

Vier Monate eigene Arbeit weggeworfen — und warum das die richtige Entscheidung war

Rackd ist eine Turnierplattform, bei der niemand etwas installieren muss. Davor lagen zwei verworfene Anläufe als Flutter-App. Am 11.06.2026 habe ich die Entscheidung schriftlich begründet, die eigene Codebase aufzugeben und neu anzufangen. Diese Case Study handelt von der Entscheidung, nicht vom Ergebnis.

Projekt ansehen
Verworfene Flutter-Dateien bei der Entscheidung
~90Quelle: docs/03-strategy-decision.md, 11.06.2026
Commits im Neubau
384Quelle: git log rackd, 19.03.2026 bis 10.07.2026
Commits im verworfenen Vorgänger
52Quelle: git log pongPartner, 14.02.2026 bis 16.03.2026
Quellzeilen TypeScript
33.452Quelle: Repository ohne Abhängigkeiten, Stand 11.08.2026
Dokumentierte Entscheidungsphasen vor dem Neubau
6Quelle: docs/01-analysis.md bis 06-roadmap.md

Beerpong-Turniere werden bis heute auf Papier oder in Tabellen organisiert. Zwei eigene Anläufe als Android-App existierten bereits — ein verworfenes Grundgerüst und eine deutlich weiter entwickelte App mit Match-Tracking, Turnieransätzen und einem fertig konzipierten Verfahren, um nachträglich Spieler-Konten mit bereits gespielten Partien zusammenzuführen.

Eine laufende Plattform, auf der Turniere über einen geteilten Link gespielt werden — ohne Installation, ohne Konto für Teilnehmer. Die Turnierlogik liegt in einem eigenen Paket ohne Laufzeitabhängigkeiten mit erzwungenen Abdeckungsschwellen, der Datenbankzugriff ist durchgängig standardmäßig verboten und wird gezielt freigegeben.

Drei Anläufe, zwei davon im Papierkorb

Oktober 2025 — ein Flutter-Grundgerüst. Ein Commit, dann liegen geblieben.

Februar bis März 2026pongPartner, 52 Commits. Eine echte App mit Match-Tracking, ersten Turnierfunktionen und einem durchdachten Konzept, wie man Ergebnisse von Spielern ohne Konto nachträglich einem echten Konto zuordnet. Weit genug, um weiterzumachen.

Juni 2026 — statt weiterzumachen: sechs Dokumente. Bestandsaufnahme, Marktrecherche, Strategieentscheidung, Anforderungen, Architektur, Fahrplan.

Was die Recherche ergab

Zwei Befunde, die die Richtung gekippt haben.

Erstens: Reine Score-Tracker haben eine belegbare Decke. Vergleichbare Apps kommen über wenige hundert Downloads nicht hinaus. Das ist kein Ausführungs-, sondern ein Kategorieproblem — die App wird einmal im Jahr auf einer Party gebraucht und danach deinstalliert.

Zweitens: Die Nutzung liegt in der Turnierorganisation. Wer ein Turnier ausrichtet, hat ein echtes, wiederkehrendes Problem: zwanzig Leute, ein Turnierbaum, ständige Rückfragen nach dem Spielstand. Der Score-Tracker ist die Schicht, die Leute zurückholt — aber kein Produkt für sich.

Daraus wurde die Produktthese, die alles Weitere bestimmt hat:

„Das Turnier verwaltet sich selbst, und niemand muss etwas installieren.“

Warum die These die App ausschloss

Der Kern ist der geteilte Link. Ein Teilnehmer bekommt eine Nachricht, tippt darauf und ist im Turnier — kein Store, kein Download, kein Konto. Ein Zuschauer öffnet dieselbe Adresse auf dem Fernseher im Raum.

Das ist im Web selbstverständlich und in einer App ein Widerspruch. Jeder Weg, das mit einer installierten App zu bauen, führt über eine Hürde, die genau die Leute abschreckt, die man erreichen will.

Damit war die Entscheidung keine Geschmacksfrage mehr. Die Entscheidungsvorlage listet die Kosten ausdrücklich mit auf — sinngemäß: rund 90 Dateien Flutter-Code werden verworfen, aber die Oberfläche hätte ohnehin neu gemusst, Tests gab es keine, und die Turnierlogik musste ohnehin neu geschrieben werden.

Das ist der Satz, auf den es ankommt. Nicht „der alte Code war schlecht“, sondern eine nüchterne Aufstellung dessen, was verloren geht — und die Feststellung, dass der größere Teil ohnehin angefallen wäre.

Was aus dem Vorgänger überlebt hat

Nicht der Code, aber das Denken: das Datenmodell, das Regelwerk für Spielabläufe und vor allem das Verfahren, mit dem sich nachträglich ein Spielerkonto mit bereits gespielten Partien zusammenführen lässt. Das war in pongPartner fertig durchdacht und ist unverändert übernommen worden.

Vier Monate Arbeit sind also nicht verschwunden. Verschwunden ist die Implementierung — der Teil, der am schnellsten wieder entsteht, wenn das Konzept steht.

Wie der Neubau gebaut ist

Die Turnierlogik liegt in einem eigenen Paket ohne Laufzeitabhängigkeiten. Sie ist die einzige Stelle, an der ein Fehler ein laufendes Turnier zerstört — entsprechend vollständig ist sie getestet, ohne Datenbank, ohne Browser, mit in der Konfiguration erzwungenen Abdeckungsschwellen.

Der Datenbankzugriff ist standardmäßig verboten und wird pro Tabelle gezielt freigegeben. Schreibvorgänge, die mehrere Regeln gleichzeitig berühren, laufen über Funktionen mit festgelegten Rechten statt über direkten Tabellenzugriff.

Die Anwendung läuft in Docker auf einem eigenen Server hinter Caddy mit automatischem TLS, ausgeliefert über GitHub Actions. Deutsch und Englisch sind von Anfang an gleichwertig — nicht nachgerüstet.

Warum das hier steht

Diese Case Study hat die schwächsten Nutzerzahlen von allen auf dieser Seite und ist trotzdem die, auf die ich am meisten Wert lege.

Auftraggeber kaufen selten ein fertiges Feature. Sie kaufen jemanden, der merkt, wenn der eingeschlagene Weg nicht zum Ziel führt, und der es sagt, bevor das Geld ausgegeben ist. Diese Entscheidung habe ich gegen meine eigene Arbeit getroffen und dokumentiert. Gegen einen fremden Plan fällt sie leichter.

Wann ist ein Neubau besser als Weiterentwickeln?
Wenn der Grund für den Neubau im Produkt liegt und nicht im Code. Hier war es das: Die Kernidee — Turniere über einen Link, ohne Installation — ist im Web zu Hause und in einer App ein Widerspruch. Wäre nur der Code unaufgeräumt gewesen, wäre Aufräumen die richtige Antwort gewesen. Der ehrliche Test lautet: Verschwindet das Problem, wenn ich den Code aufräume? Wenn nein, ist der Neubau die günstigere Variante.
Was ist bei so einer Entscheidung nicht verloren?
Fast alles außer dem Code. Datenmodell, Regelwerk und das Verfahren zum nachträglichen Zusammenführen von Spielerkonten waren im Vorgänger bereits durchdacht und sind unverändert eingeflossen. Verworfen wurden rund 90 Dateien Oberflächen- und Anbindungscode — der Teil, der ohnehin neu gemacht worden wäre.
Warum ist die Turnierlogik ein eigenes Paket?
Weil sie die einzige Stelle ist, an der ein Fehler ein laufendes Turnier zerstört. Als eigenständiges Paket ohne Laufzeitabhängigkeiten lässt sie sich vollständig testen, ohne Datenbank, Browser oder Netzwerk — und die Abdeckungsschwellen sind in der Konfiguration erzwungen, nicht empfohlen.
Was bedeutet standardmäßig verbotener Datenbankzugriff?
Dass keine Tabelle von sich aus lesbar oder schreibbar ist und jeder Zugriff einzeln erlaubt werden muss. Der umgekehrte Weg — alles offen, einzelne Dinge sperren — führt zuverlässig dazu, dass eine Tabelle vergessen wird. Schreibvorgänge, die mehrere Regeln gleichzeitig berühren, laufen über Funktionen mit festgelegten Rechten statt über direkten Tabellenzugriff.

← Alle Referenzen