Vagerbond Studios

Anpfiff Manager Pro · Entwicklungstagebuch

Woran ich am Fußballmanager arbeite

Ein Fußballmanager ist zu 90 % Buchhaltung, die niemand sieht: Zuschauerzahlen, Ablösesummen, Terminkalender, Verträge. Wenn daran etwas nicht stimmt, stürzt nichts ab — es fühlt sich nur falsch an, und man kommt jahrelang nicht drauf.

Deshalb schreibe ich hier auf, was ich finde. Meistens sind das Fehler in meinem eigenen Code, und meistens hat sie eine Messung gefunden, nicht ein Absturz. Kein Marketing, keine Versprechen, keine Termine — nur das, was diese Woche auf dem Tisch lag.

Gebaut wird mit KI-Unterstützung — Code, Grafik und Texte entstehen im Wechselspiel mit Sprachmodellen. Was die KI nicht abnimmt, ist die Entscheidung, was richtig ist: Die Messungen auf dieser Seite widersprechen regelmäßig dem, was ich vorher vermutet hatte — und dann gewinnt die Messung.

Aktien zahlten Dividende doppelt, einmal davon aus dem Nichts

Wer Vereinsaktien besaß, bekam jeden Monat zweimal Geld: einmal einen festen Zins auf den Kurs und einmal einen Anteil an der Vereinskasse. Der zweite Weg zog das Geld aber nirgends ab. Die Kasse des Vereins blieb gleich, und das Konto des Trainers wuchs trotzdem.

Jetzt gibt es genau einen Weg, und der liegt am Saisonende. Ein Verein schüttet nur aus, wenn er im abgelaufenen Jahr Gewinn gemacht hat und danach noch genug Rücklage behält. Die Ausschüttung geht von seiner Kasse ab, wird auf alle Anteile verteilt, und der Kurs sinkt um genau diesen Betrag. Firmen haben ein schwankendes Jahresergebnis: Mal fällt die Dividende aus, im nächsten Jahr kommt sie wieder. Beim eigenen börsennotierten Verein entscheidet man selbst: keine, vorsichtig oder höher, aber nur so weit, wie Gewinn und Rücklage es hergeben.

Dividendenzahlungen für Vereinsaktien
vorher: zweimal im Monat, eine davon ohne Kassenabzug
jetzt: einmal je Saison, aus dem Gewinn

Dazu kamen vier Fonds aus Firmen, die es im Spiel schon gibt. Ein ausschüttender Fonds zahlt die Dividenden seiner Firmen aus. Ein thesaurierender behält sie und wird dadurch mehr wert. Beim Kauf sieht man den Korb, die Art und wann ausgezahlt wird.

Zwei Stellen, die dasselbe tun, fallen einzeln nicht auf. Jede sah für sich vernünftig aus. Erst als die Dividende einen einzigen, saisonweisen Weg bekommen sollte, stand die Frage im Raum, wo das Geld bisher eigentlich herkam.

Brutto, Steuer, Netto

Bisher kam das Trainergehalt in voller Höhe aufs Konto. Jetzt wird es brutto vereinbart und netto ausgezahlt, und jede Zahlung landet in einem Buchungsjournal: Grundlage, Satz, Brutto, Steuer, Netto. Mieten werden auf den Überschuss nach Kosten und Schäden besteuert. Gewinne aus Aktien, Fonds, Krypto und Immobilien nur, wenn man wirklich verkauft, und nur der Gewinn. Ein Verlust kostet nichts, bringt aber auch keine Gutschrift. Auch die Sparzinsen sind jetzt Kapitalertrag.

Monatsgehalt 10.000 € in Deutschland
vorher: 10.000 € aufs Konto
jetzt: 5.800 € netto, 4.200 € Abgaben

Die Sätze sind Spielwerte, keine Steuerberatung. Zehn Länder haben eigene, grobe Durchschnittssätze, alle anderen einen sichtbaren Standard. Wichtiger als die genaue Zahl war, dass es genau eine Stelle gibt, an der gerechnet wird. Sonst rechnen Gehalt, Börse und Vermietung nach drei verschiedenen Regeln.

Wohnen hängt jetzt am Verein

Kleine Wohnungen ließen sich nur mieten, nie kaufen. Jetzt ist nur noch das WG-Zimmer reine Miete. Und wer den Verein wechselt, bekommt eine Wohnentscheidung für die neue Stadt: mieten, kaufen oder in eine eigene Immobilie am Ort einziehen. Eigentum wird dabei nie stillschweigend verkauft. Man entscheidet, ob man es verkauft oder vermietet.

Die Preise hängen am Land und an der Größe des Ortes. Weil die Spielwelt keine Einwohnerzahlen kennt, wird die Ortsgröße aus den Vereinen dort abgeleitet: Ein Erstligist mit großem Stadion macht eine Metropole. Der Preis wird bei Vertragsschluss festgehalten. Ein späterer Abstieg des Ortsvereins macht die Miete nicht billiger. Eigentum altert, verliert dabei an Wert und lässt sich renovieren, wird aber nie mehr wert, als es gekostet hat.

Monatsmiete einer 2-Zimmer-Wohnung
vorher: überall 1.000 €
jetzt: 1.600 € (Metropole) · 750 € (Kleinstadt) · 450 € (polnische Kleinstadt)

Zwei alte Fehler kamen dabei mit hoch. Der Erfolg „Eigenheimbesitzer“ wurde bei jedem Umzug freigeschaltet, auch beim Einzug ins gemietete WG-Zimmer. Und ein Zufallsereignis, bei dem man ein Haus für 450.000 € kauft, hätte nach der neuen Ortsregel ein Haus im Wert von 720.000 € hinterlassen, also Geld aus dem Nichts beim Wiederverkauf. Beides ist behoben.

Eine Ableitung ist kein Messwert. Lübeck gilt bei mir als Kleinstadt, weil dort kein Verein ab der dritten Liga spielt. Das steht so in der Dokumentation, statt es zu verstecken.

Pokale, die erst in Saison fünf verschwanden

Jeder Pokal wurde in seiner ersten Saison geprüft, manche auch in der zweiten. Erst ein Lauf über fünf Spielzeiten zeigte, dass nach und nach Pokale ausfielen. Zweite Mannschaften großer Vereine steigen über die Jahre in die unteren Ligen auf und dürfen dort nicht im Pokal spielen. Wo eine Runde eine feste Größe braucht, fehlte dann ein Teilnehmer, und das Feld ging nicht mehr auf. In England fiel der Ligapokal aus, wenn nur wenige Vereine europäisch spielten: Die erste Runde hatte dann 71 Teams.

Wo die Lücke entsteht, rückt jetzt ein Amateurverein nach, sichtbar als Ersatz gekennzeichnet. Ungerade Felder bekommen ein Freilos. In den Niederlanden steht in der Pokalordnung eine harte Grenze: höchstens 34 Profivereine. Mehr ist dort nicht geregelt. Statt still jemanden zu streichen, lehnt das Spiel den Ablauf in diesem Fall ab und fällt auf den allgemeinen Pokal zurück.

Pokale mit eigenem Ablauf, je Saison über fünf Saisons
vorher: ab Saison fünf fehlten mehrere
jetzt: 36 von 36 in jeder Saison

Ein Test über eine Saison prüft die Startwelt, nicht das Spiel. Die Fehler entstanden erst, als sich die Welt durch Auf- und Abstiege verändert hatte.

Den Fehler hatte meine eigene Prüfung gebaut

In Georgiens dritter Liga standen in meiner Testwelt zehn zweite Mannschaften unter sechzehn Vereinen. Ich hielt das für einen Fehler in den Weltdaten und habe ihn so gemeldet. Er stammte aber aus meiner eigenen Prüfung: Sie sollte eine zweite Mannschaft anlegen, legte sie aber genau in der Liga an, die sie prüfen wollte. Weil sie die neue Mannschaft dort nicht mitzählte, legte sie die nächste an, für jeden der zehn Erstligisten einmal. Die echte Startwelt hat in Georgien keine einzige.

Eine Prüfung kann die Welt verändern, die sie misst. Die falsche Meldung ist nicht gelöscht, sondern steht mit der Berichtigung daneben im Bericht.

Über dreißig Länder spielen ihren echten Pokal

Bisher war ein Landespokal überall gleich: ein Feld nach Ansehen, gelost, Runde für Runde. Jetzt folgen 34 Landespokale ihrer Ausschreibung. Unterklassige Vereine fangen früher an, große steigen später ein, es gibt Freilose, Hin- und Rückspiele und je Runde eine eigene Regel für Unentschieden. Schweden spielt eine Gruppenphase, Georgien einen festen Turnierbaum ohne Neuauslosung. England und Schottland haben zusätzlich ihren Ligapokal.

Wo ein Land in der Spielwelt bisher gar keinen Pokal hatte, ist einer dazugekommen, mit erfundenem Namen nach einem Fluss oder Berg. Wo die Ausschreibung nicht vollständig vorliegt oder eine Reform läuft, bleibt das Land ausdrücklich offen, statt eine Regel zu erfinden.

Pokalprüfungen in einem Durchgang
363 Prüfungen, 1 bekannter offener Fall (Ukraine)

Der Posteingang entscheidet mit

Viele Mails waren bisher nur zum Lesen da. Jetzt kann man aus dem Posteingang heraus handeln. Eine Leihanfrage eines anderen Vereins nennt Leihgebühr, Gehaltsanteil und Kaufoption und lässt sich annehmen oder ablehnen. Eine Vertragswarnung führt direkt in die Verhandlung. Eine Presseanfrage trägt ihre konkrete Frage. Die Einberufung zur Nationalmannschaft kommt nicht mehr als Sofortfenster, sondern als Entscheidung je Spieler.

Beim Trainervertrag tauchte ein Doppel auf: Der Vorstand machte am Saisonende ein Angebot und eine Mail im Frühjahr ein zweites. Eine Zusage hätte Laufzeit und Gehalt zweimal ändern können. Jetzt gibt es nur noch ein Angebot, im Posteingang, mit einer einmaligen Gehaltsforderung.

Erst Europa, dann der Rest der Welt

Die Ligen, Pokale und Europapokale aller 55 europäischen Verbände sind jetzt recherchiert. Bis zu einer ersten spielbaren Testfassung bleibt Europa der einzige geografische Schwerpunkt. Die übrigen Kontinente bleiben im Spiel, werden aber erst danach so genau nachgezogen.

Danach geht es an alles, was eine Karriere trägt: Training, Scouting, Transfers, Verträge, Taktik, Personal und Jugend, Finanzen, Sponsoren, Fans, Vorstand, Medien, Stadion und das Privatleben. Die Messlatte für die Testfassung: eine frische Karriere über mehrere Spielzeiten, Speichern und Laden ohne Verlust, eine stabile Laufzeit und eine bedienbare Oberfläche auf Deutsch und Englisch.

Für den Frauenfußball liegen jetzt eigene Regelakten für alle 55 Verbände vor, getrennt von den Männerligen. Gespielt werden sie noch nicht. Sie werden erst angeschlossen, wenn ein Land vollständig belegt ist.

Umfang schneiden schlägt Umfang bauen. Ein Europa, das über fünf Spielzeiten sauber läuft, ist mehr wert als eine Welt, die nur in der ersten Saison stimmt.

Jedes neue Spiel beginnt jetzt mit derselben Welt

Bisher würfelte jeder Programmstart eine eigene Welt. Die Vereinsnamen kamen aus Dateien und waren immer gleich, aber Spieler, Trainerteams, Stadiongrößen und Vereinsfarben nicht. Wer zweimal ein neues Spiel anfing, hatte zwei verschiedene Kader. Jetzt baut sich die Welt immer mit demselben festen Startwert auf: Wer, wann und wo auch immer ein neues Spiel beginnt, bekommt dieselben Mannschaften und Spieler.

Der Weg dorthin war länger als die eine Zeile, die es am Ende brauchte. Am 2. Oktober hatten zwei Läufe mit gleichem Startwert noch 48 Spieler Unterschied, weil der Startwert erst gesetzt wurde, als die Welt schon stand. Danach habe ich den Aufbau in 15 Schritten vermessen, auch über den echten Ladebildschirm.

Abweichende Aufbauschritte bei gleichem Startwert
vorher: Welt verschieden
jetzt: 0 von 15

Wer nach einer Karriere über das Hauptmenü neu anfängt, bekam bisher die schon bespielte Welt untergeschoben. Jetzt fragt das Spiel nach und startet sich neu.

Gleich ist die Startwelt nur innerhalb derselben Spielfassung. Jede Änderung an einem Erzeuger verschiebt die Zufallsfolge. Spielstände sind davon nicht betroffen, sie tragen ihre Welt selbst.

Österreich spielte fünf Runden zu wenig

Die österreichische Liga teilt sich nach 22 Spieltagen in eine Meister- und eine Abstiegsrunde. Die beiden Runden spielen Hin und Rück, zusammen 32 Spieltage. Mein Spiel baute dort nur eine einfache Runde. Die Regel für die Punkteteilung war angeschlossen, die Rundenzahl nicht.

Spieltage je Verein
vorher: 27
jetzt: 32

Ein angeschlossenes Regelwerk ist oft nur ein angeschlossenes Feld. Seitdem schreibe ich dazu, welches Feld einer Regel wirklich im Spiel ankommt, statt „Österreich ist umgesetzt“.

Regeln von 2026 gelten 2027 weiter, aber sichtbar

Fast alle Ordnungen, die ich lese, gelten für die Saison 2026/27. Das Spiel beginnt aber 2027/28. Bisher übernahm der Code die gelesene Regel stillschweigend. Jetzt merkt sich jede solche Regel ihre Quelle und ihre Saison und wird als fortgeschrieben gekennzeichnet. Ausnahmen sind eine belegte Reform oder ein ausdrückliches Ablaufdatum.

Dabei sind beim Gegenlesen auch handfeste Fehler aufgefallen: Bei Gleichstand im Pokal erfand der Code bis zum 6. Oktober ein Tor. Jetzt gibt es Verlängerung und Elfmeterschießen, je Land nach Ordnung, in Spanien entscheidet die Ligaplatzierung. In der ersten niederländischen Liga war die Relegation spiegelverkehrt. Belgien spielt sein Pokalhalbfinale mit Hin- und Rückspiel.

Niederlande, erste Liga: direkte Absteiger / Relegation
vorher: 1 / 2
jetzt: 2 / 1
Relegationen mit belegter Gleichstandsregel
vorher: 0
jetzt: 25

Eine Lücke ist eine gültige Antwort. Wo keine Ordnung vorliegt, steht im Spiel eine gekennzeichnete Annahme, keine erfundene Regel.

Die englische Fassung war besser als gedacht, an anderen Stellen schlechter

Eine Zählung hatte 586 Texte gefunden, die „nicht an die Übersetzung angeschlossen“ seien. Das stimmte großteils nicht: Die Oberfläche übersetzt jeden neu erscheinenden Text ohnehin. Der Zähler kannte diesen Weg nicht. Ein erster, zu breiter Umbau hat eine Zeile sogar verschlechtert und wurde vollständig zurückgenommen.

Die echten Lücken lagen woanders. Sätze, die im Code aus Stücken zusammengesetzt werden, hatten nur Übersetzungen für die Stücke. Großgeschriebene Überschriften mit Umlaut fanden ihre Vorlage nie, weil die Mustersuche der Engine „Ä“ und „ä“ nicht als gleich ansieht. Und „Wo.“ (Wochen) stand im Katalog als „Where.“.

Gezielt gesuchte deutsche Texte in der englischen Anzeige (54 Bildschirme)
vorher: 47
nachher: 1

Der eine Rest war kein sichtbarer Text, sondern ein Zwischenschritt, den das Protokoll mitschrieb. Das habe ich danach behoben, aber noch nicht mit einem neuen Bildschirmdurchlauf nachgemessen.

Ein Zähler, der einen Weg nicht kennt, zählt das Falsche. Diesmal war das mein eigener.

Neun Testvorgaben zeigten auf echte Spielstände

Die automatischen Prüfläufe starten echte Karrieren und speichern dabei. Neun Vorgaben zeigten auf Speicherplätze, die auch normale Spielstände benutzen, vier davon schreibend. Dazu speichert das Spiel automatisch in Platz 0. Ein Prüflauf hätte so einen echten Spielstand überschreiben können.

Jetzt bricht die Prüfsuite ab, bevor sie startet, wenn sie in den echten Benutzerbereich schreiben würde. Dazu kam eine neue Nulllinie über 171 Prüfläufe mit 5.354 Prüfungen, gegen die jede spätere Änderung gemessen wird.

Der Schutz gehört in den Lauf, nicht in die Gewohnheit. „Ich passe schon auf“ hätte beim zehnten Mal nicht gereicht.

375 Ligen standen auf Spieltag 1, mit vollen Tabellen

Ligen, in denen der eigene Verein nicht spielt, laufen über einen schnelleren Weg. Der hat nie weitergezählt, welcher Spieltag gerade ist. Die Tabellen füllten sich, der Zähler blieb bei 1. Daraus entstanden 222 Kalenderwarnungen, deren eigener Warntext eine falsche Ursache nannte.

Kalenderwarnungen je Saison
vorher: 222
jetzt: 0
Gespielte Partien einer Liga nach dem Laden
vorher: 0
jetzt: 288

Im selben Durchgang: Gespielte Partien gingen beim Laden verloren, eine Saison ließ sich zweimal abschließen, und 543 Prüfungen liefen wochenlang gar nicht. Eine Zeile sprach ein Systemmodul auf eine Art an, die in dieser Aufrufart nicht funktioniert. Die Prüfungen waren nie rot, sie waren unsichtbar.

Eine Prüfung, die nicht läuft, sieht aus wie eine, die besteht. Seitdem zählt eine Prüfung nur mit ihrer Abschlusszeile.

1.671 echte Namen ersetzt, und Turniere werden zu Ende gespielt

Im Spiel dürfen keine echten Vereins-, Wettbewerbs-, Personen- oder Markennamen stehen. Bei einer Durchsicht in sechs Stufen kamen 1.671 Stellen zusammen. Die erste Suchliste hatte Sportgesellschaften nicht gefunden, weil sie für Personennamen gebaut war.

Daneben: Weltmeisterschaft, Europameisterschaft und die Kontinentalturniere spielen jetzt ihren K.-o.-Baum bis zum Finale. Und Pokal-, Europa- und Länderspiele belasten den Kader. Die Verletzungsrate ist an 600 Vereinspartien gemessen, nicht geschätzt.

Eine Fundliste erbt die Blindheit ihres Erzeugers. Mehr Suchbegriffe hätten nichts gebracht, es brauchte einen anderen Blickwinkel.

Neue Spielansichten, konkrete Nacharbeit

Die Anpfiff-Seite zeigt jetzt aktuelle Aufnahmen von Dashboard, Kader, Liga, Stadionbaukasten, Finanzen und Kalender. Sie stammen aus einer isolierten Testkarriere; ergänzte Finanz- und Termindaten sind auf der Seite ausdrücklich gekennzeichnet.

Bei der Durchsicht wurden mehrere Darstellungsfehler bearbeitet: Spieltagsdaten kommen aus dem Ligaspielplan, beendete Pokalspiele erscheinen nicht mehr mit offenem Termin, und die Stadionstufe wird einheitlich angezeigt. Nachrichten bekommen seitlichen Abstand; Trainingslager zeigen genaue Preise.

Die größere Arbeit läuft weiter: verlässliche Speicherstände, passende Wettbewerbsregeln je Liga und Pokal sowie eine durchgehend bedienbare Karriere. Recherchierte Regeln sind dabei noch kein Nachweis ihrer vollständigen Umsetzung. Ältere Messwerte in diesem Tagebuch beschreiben jeweils die damalige Fassung.

Die neuen Spielansichten ansehen

Dreimal galt die deutsche Regel für die ganze Welt

19. September

Seit fünf Tagen lese ich Liga- und Pokalordnungen — 62 von 106 Ländern, 1.679 einzelne Vergleiche zwischen dem, was ein Verband vorschreibt, und dem, was mein Code tut. Noch wird nichts geändert: Erst die vollständige Analyse, dann die Entscheidung, was davon ins Spiel gehört.

Der wiederkehrende Befund war kein Tippfehler, sondern eine Denkgewohnheit. An drei Stellen ist eine deutsche Größe zur Weltregel geworden: Die Einnahmen eines Pokalspiels werden überall 45/45/10 geteilt — die Regel des deutschen Pokalwettbewerbs. Die Winterpause dauert überall zwei Wochen, weil ich sie am deutschen Spielplan nachgerechnet habe. Und jede Relegation geht über Hin- und Rückspiel.

Länder, die anders teilen
im Spiel: 0
real: 5
Winterpause Ukraine
im Spiel: 2 Wochen
real: 10 Wochen
Länder mit einspieligem Play-off
im Spiel: 0
real: 9

An zwei dieser Stellen steht der deutsche Bezug im Kommentar — ehrlich aufgeschrieben und nie als Einschränkung gelesen. Wer ein Land als Vorlage nimmt, sollte dazuschreiben, dass es eine Vorlage ist. 44 Länder stehen noch aus; angepasst wird, wenn alle gelesen sind, und in der Reihenfolge, wie viele Länder eine Codestelle betrifft.

Ein Kommentar ist kein Nachweis — diesmal erfand er ein Tor

19. September

Zwei Zeilen, die denselben Fehler machen. Steht es nach Hin- und Rückspiel unentschieden, behauptet der Kommentar darüber Verlängerung und Elfmeterschießen. Der Code darunter würfelt: 55 Prozent für die Heimmannschaft des Rückspiels.

Die zweite Stelle, beim Spiel um den Supercup, ist schlimmer. Sie würfelt nicht nur den Sieger — sie addiert ein Tor. Aus einem 1:1 wird ein 2:1 im Spielbericht. Ein Ergebnis, das nie stattgefunden hat, und jede Statistik, die Tore zählt, trägt es mit.

Gefunden hat das keine Fehlermeldung, sondern eine Verbandsordnung, die zweimal fünfzehn Minuten Verlängerung vorschreibt. Beide Stellen sind notiert und bleiben vorerst stehen: Wer mitten in einer Prüfung repariert, misst hinterher gegen ein bewegtes Ziel.

Mehr Bilder heilen keine Dubletten — die Erweiterung hat einen anderen Grund

18. September

Der Bildkatalog wächst gerade von 21.600 auf 50.400 Gesichter: 200 für jede Kombination aus Herkunft, Alter und Geschlecht. Der Lauf ist bei gut siebzig Prozent, danach sind Trainer, Stab und Vorstand an der Reihe.

Was er ausdrücklich nicht löst: doppelte Gesichter in derselben Mannschaft. Das war ein Zuteilungs-, kein Mengenproblem und ist seit dem 9. September erledigt. Die Erweiterung wirkt nur dort, wo der Vorrat knapp gegen die Kadergröße steht — und das ist die Frauenseite mit über zweitausend Vereinen.

Bilder im Katalog
21.600
50.400
kleinster Vorrat je Gruppe
40
200

Offen bleibt etwas, das mehr Bilder erst recht nicht beheben: Zwei der achtzehn Herkunftstypen sind im Hautton nicht von ihrem Behelf zu unterscheiden — nachgemessen, nicht geschätzt. Ein geänderter Bildauftrag macht den ganzen Typ neu fällig, die vorhandenen Bilder eingeschlossen. Deshalb steht diese Frage getrennt von der Stückzahl.

106 Länder, und die Regeln hatte nie jemand gegengelesen

14. September

Das Spiel führt 612 Ligen in 215 Ländern. Die Auf- und Abstiegszahlen, Pokalfelder und Spielmodi darin stammen aus Recherche, aus Analogieschlüssen und an manchen Stellen aus einer plausiblen Annahme. Nachgelesen hatte sie niemand.

Seitdem läuft genau das: Land für Land die amtliche Wettbewerbsordnung des Verbandes gegen die zuständige Zeile im Code. Jeder Vergleich bekommt einen Status — stimmt, weicht ab, fehlt, ungeklärt — und die Fundstelle dazu. Was sich nicht belegen lässt, bleibt ungeklärt und wird nicht hübsch geraten.

Was dabei am häufigsten schiefging, war meine eigene Suche. Von siebzehn Dokumenten, die im ersten Durchgang als „nicht auffindbar“ notiert waren, lagen fünfzehn offen bereit — gesucht worden war mit einem Werkzeug, das PDF gar nicht lädt. Die Kategorie „gibt es nicht“ ist in diesem Projekt meistens die Kategorie „falsch gesucht“.

Eine zweite Welt mit 61.097 Spielerinnen — die noch nicht spielt

10. September

Die Frauenwelt hat Mannschaften bekommen: 171 Ligen, 2.209 Vereine, dazu Trainerin, Vorstand und Betreuerstab. Getrennte Bestände, gemeinsame Zugriffswege — ein zweiter Kadererzeuger wäre der teuerste Doppelgänger geworden, den dieses Projekt je hatte.

Spielerinnen
0
61.097
Vereine ohne Kader
2.209
0

Was nicht passte: Sie wurde überhaupt nicht gespeichert. Drei Messläufe hintereinander ergaben 61.039, 61.167 und 61.097 Spielerinnen — nach jedem Laden stünde eine andere Mannschaft auf dem Platz. Derselbe Fehlertyp zum sechsten Mal: generisch laden, von Hand speichern.

Gespielt wird in dieser Welt noch nicht. Keine Spielpläne, keine Tabellen, keine Wirtschaft, keine Pokale. Das ist der nächste große Schritt und berührt Terminplan, Auf- und Abstieg und den Spielstand gleichzeitig — deshalb steht er hinter der Länderprüfung und nicht davor.

Vier Jahrzehnte messen, bevor man an einer Schraube dreht

10. September

Vier Läufe über je vierzig Saisons, um zu sehen, ob die Vereinswirtschaft über die Zeit trägt. Das Ergebnis war kein Messwert, sondern ein Befund über das Messgerät.

Ligen mit vollständigen 40 Saisons
ungeprüft
118 von 123
Ligen, die nach dem Saisonende zu kurz planen
—
27 von 612

Nach dem Saisonende plant der Spielplan zwei Runden, obwohl 27 Ligen drei oder vier spielen; zwei weitere verlieren ihre Endrunde am festen Jahreswechsel. Wer darauf die Wirtschaft kalibriert, eicht an unvollständigen Spielzeiten.

Also keine Kalibrierung, bevor das repariert ist. Die übrigen Zahlen des Laufs sind als Spanne festgehalten — die zweite Liga kostet rund 110 Prozent ihrer Einnahmen, die erste Liga geht in sieben Prozent der Fälle insolvent. Das ist eine Beschreibung, kein Regler, an dem man dreht.

Jeder fünfte Kader hatte zwei gleiche Gesichter

9. September

Die erste Messung meldete 8,5 Prozent doppelte Gesichter und sah harmlos aus. Aufgeschlüsselt nach Ligaebene waren es in der ersten Liga 16 Prozent — ein Erstligist führt dreizehn Mitarbeiter, ein Neuntligist drei, und ein Durchschnitt darüber ist keine Zahl.

Kader mit Dublette, Ebene 1
19,9 %
0,0 %
alle 8.195 Kader
1.642
0
zusätzliche Bilder dafür
—
0

Es lag nicht an zu wenigen Bildern: Bei 200 Bildern je Gruppe und 26 Spielern sind immer genug da. Sie wurden nur blind gezogen, jeder unabhängig — das ist das Geburtstagsproblem.

Ein Ausweichschritt je Verein macht daraus null, ohne ein einziges zusätzliches Bild. Mit doppelt so vielen Bildern und dem alten Verfahren wären es immer noch drei Prozent gewesen — die teure Lösung wäre auch die schlechtere gewesen.

Die Antwort mit dem größten Nachteil machte die Mannschaft am stärksten

8. September

An einem Tag sind 880 neue Ereignisse dazugekommen — Spieler, Team, Stab, Vorstand, Sponsoren, Familie, Fans, Medien, Nachwuchs, Verband und der ganz normale Vereinsalltag. Aus 363 werden 1.243. Beim Abnehmen fiel etwas auf, das die ganze Lieferung verdorben hätte.

Es gibt eine Wirkung namens „Fokus aufs nächste Spiel". Sie setzte bisher nur eine Fahne, und die Spielengine gab dafür pauschal den größten Einzelbonus, den das Spiel kennt. Die Zahl im Ereignis wurde nie gelesen.

Von 591 Vorkommen sind 347 als Nachteil gemeint — „das Team ist abgelenkt", „die Vorbereitung leidet". Sie alle wirkten als Bonus. Wer die Antwort mit dem größten Fokusverlust wählte, bekam die stärkste Mannschaft. Und ausgerechnet diese Größe hatte sich beim Schreiben als die natürlichste Preis-Achse angeboten; sie wurde entsprechend oft benutzt.

Eine Wirkung, die ihren eigenen Wert nicht liest, ist schlimmer als eine, die gar nichts tut. Sie sieht im Quelltext richtig aus, sie steht im Kommentar richtig beschrieben — und sie zeigt in die genau entgegengesetzte Richtung. Jetzt trägt der Wert seine Bedeutung, gedeckelt, und ein Prüflauf hält es fest.

Die 880 Ereignisse wurden gar nicht geladen

8. September

Die Ladefunktion führte eine von Hand gepflegte Liste mit 29 Dateipfaden. Im Ordner lagen inzwischen 40 Dateien. Die Meldung beim Start sagte brav „363 Events geladen" — also genau so viele wie vorher, und damit sah sie völlig richtig aus.

Das ist dieselbe Sorte Fehler wie eine veraltete Liste von Autoloads oder von Namenspools, und sie ist mir in diesem Projekt jetzt zum dritten Mal begegnet: Eine handgepflegte Liste veraltet still. Wer eine Datei hinzufügt, bekommt keine Fehlermeldung — er bekommt nur weniger Inhalt. Jetzt wird der Ordner durchlaufen, und die Meldung nennt beide Zahlen: 1.243 Ereignisse aus 40 von 40 Dateien.

Ein Ereignis über einen Spieler konnte diesen Spieler nicht erreichen

8. September

Bis heute war jedes Ereignis anonym — „Ein Stammspieler kommt zu dir", „Dein Kapitän bittet um ein Gespräch" — und die Wirkung traf entweder den Trainer oder den ganzen Kader. Der Mensch, um den es ging, kam darin nicht vor.

Jetzt lassen sich sechs Rollen im Text besetzen: ein Spieler, der Kapitän, der Torwart, ein Talent, der Stürmer, ein Veteran. Aus „Ein Spieler steht unter Dopingverdacht" wird „Jan Szabó steht unter Dopingverdacht" — und die Antwort kostet ihn die Moral, nicht die Mannschaft.

Nachgerüstet wurden 87 Textstellen, und zwar nur die am Satzanfang. Dort steht die Rolle im Nominativ, und ein Name passt sicher. Mitten im Satz wäre es riskant: „Du sprichst mit deinem Kapitän" ergibt mit einem Namen zwar „mit Jan Szabó", mit dem Rückfalltext aber „mit dein Kapitän".

Der Rest bleibt bewusst anonym. Das ist keine Lücke, sondern die Grenze dessen, was sich ohne Grammatikprüfung sicher machen lässt — und eine Grenze, die man kennt, ist besser als eine, in die man hineinläuft.

Eine Zuordnung „erfunden → echt" wurde mitgeliefert

8. September

Anpfiff benutzt keine echten Vereins- und Wettbewerbsnamen. Ein Prüfwerkzeug sucht danach und meldete seit Tagen null Treffer. Es durchsuchte allerdings ausschließlich Quelltext — der gesamte Textbestand des Spiels lag außerhalb seiner Reichweite: über achthundert Ereignisse, die Interviews, die Wettbewerbe.

Die Lehre ist nicht „die Liste war zu kurz". Der Verband stand die ganze Zeit in seiner Suchliste und viermal im Ereignisbestand. Ein Sucher, der eine Datei nicht liest, meldet sie nicht als fehlend — er meldet gar nichts.

Nach der Erweiterung: 84 Treffer. Darunter Netzwerke und Marken in Ereignistexten, echte Wettbewerbsnamen in einer Datendatei — und der unangenehmste Fund: Die Vereinsnamen in der Wappendatei waren schon erfunden, aber daneben stand in einem eigenen Feld der echte Verein, dem sie nachempfunden sind. Eine gepflegte Zuordnung ist etwas anderes als ein stehengebliebener Name. Ein zufälliger Treffer ist ein Versehen; eine Zuordnung ist eine Absichtserklärung.

Aufgeräumt: Das Feld ist raus, die Zuordnung liegt jetzt im Arbeitsverzeichnis. 82 Wettbewerbe umbenannt — 39 davon auf Namen, die das Spiel ohnehin schon führte. 97 Bilddateien umbenannt, weil auch Dateinamen ausgeliefert werden. Der Prüfer meldet jetzt null Treffer, und diesmal heißt das etwas.

Beim Umbenennen kam nebenbei heraus, dass die Bildpfade nie ankamen: Der Lader fragte einen Schlüssel ab, den es in den Daten nicht gibt. Bei allen 82 Wettbewerben war das Feld leer. Gefunden hat es niemand, weil ein leeres Feld aussieht wie ein Feld ohne Bild.

Dreimal angesetzt, zweimal geraten

7. September

Die Frage von außen war, ob bei einem neutralen Ort die Einnahmen geteilt werden. Beim Nachsehen stellte sich heraus: Es gab nichts zu teilen. Die Funktion, die Zuschauereinnahmen bucht, hat genau zwei Aufrufstellen, und beide stehen im Ligaweg. Ein Viertligist, der den Meister empfängt, bekam die Prämie — und keinen Cent an der Kasse.

Wie die Kasse verteilt wird, habe ich dann dreimal gebaut. Zuerst geraten: ein Viertel an den Gast. Dann kam eine Rückfrage — im Pokal behalte der Gastgeber doch alles —, der ich zugestimmt und den Code geändert habe, ohne nachzusehen. Beides war falsch.

Nachgeschlagen gilt: Im DFB-Pokal wird geteilt, 45 Prozent Heimverein, 45 Prozent Gastverein, 10 Prozent Verband — in jeder Runde. Im Europapokal behält der Heimverein alles; die UEFA teilt die Kasse nicht, ihr Geld kommt über die Prämien. Zwei Wettbewerbe, zwei Regelwerke.

Der zweite Anlauf ist der schlimmere von beiden. Die Antwort klang plausibel und kam von jemandem, der sich auskennt — aber eine Vermutung wird nicht dadurch richtig, dass sie von jemand anderem kommt. Zwei Minuten Nachschlagen hätten beide Fehlversuche gespart.

Das zweite Messpaar widerlegt die Hälfte des ersten

7. September

Eine neue Geldquelle kann die ganze Wirtschaftseichung verschieben. Gemessen wurde deshalb im kontrollierten A/B-Vergleich: gleicher Code, ein Schalter, der die Einnahme abstellt und damit den Zustand vom Vortag herstellt. Dreißig Saisons je Lauf.

Insolvenzquote je Saison, Paar 1
2,68 %
2,07 %
… Paar 2
2,55 %
1,77 %

Belegt ist damit die Insolvenzquote — die Spannen überlappen nicht. Nach dem ersten Paar hatte ich aber auch gemeldet, die unteren Ligen trügen sich jetzt besser. Das zweite Paar dreht diese drei Zahlen um. Die Kostenquoten je Ebene schwanken zwischen zwei Läufen um mehr, als der Eingriff sie verschiebt.

Das zweite Paar hatte ich genau deshalb angestoßen — und die Zahlen aus dem ersten trotzdem schon weitergegeben. Die Regel zu kennen genügt nicht; man muss warten, bis sie geantwortet hat. Was hält: Das Kassenbuch stimmt in allen vier Läufen, je rund 337.700 Prüfungen, null Abweichungen.

Jede Weltmeisterschaft fand in Deutschland statt

7. September

Gestern hat das Spiel gelernt, dass bei einem Turnier niemand zu Hause spielt außer dem Gastgeber. Was fehlte, war der Gastgeber selbst: Er stand als fester Wert im Quelltext. Jede WM und jede EM in Deutschland, für immer — samt deutschem Heimvorteil in jedem Turnier, das das Spiel je ausgetragen hat.

Jetzt wandert die WM durch die Kontinentalverbände, die EM bleibt in Europa, und die Ausrichter der letzten drei Ausgaben sind gesperrt. In gut einem Viertel der Fälle richten Nachbarn gemeinsam aus — und nur Paarungen, die es real gab: Japan und Korea, Belgien und die Niederlande, Österreich und die Schweiz, Polen und die Ukraine, die USA mit Kanada und Mexiko. Dann spielen beide zu Hause.

Die Endspielorte mussten nicht erfunden werden. Alle 8.203 Vereine tragen längst ihre echte Stadt — nachgemessen, 8.203 von 8.203. Vierundzwanzig Länder haben einen festen Pokal-Endspielort, Berlin und London und Saint-Denis. Alle anderen bekommen einen rotierenden, denn in Spanien, Griechenland und der Türkei wechselt er real jedes Jahr. Ein Land, das nicht in der Liste steht, ist kein Versäumnis, sondern eine Aussage.

Und eine Ausnahme, die ich am Vortag übersehen hatte: Ich hatte jedes einspielige Pokalendspiel auf neutral gesetzt. Der US Open Cup und der schwedische Pokal lassen aber den Höhergesetzten zu Hause spielen. Aus einer Berichtigung wäre sonst eine neue Ungenauigkeit geworden — und die hätte lange dort gestanden, weil niemand mehr hinsieht, was gestern schon behoben wurde.

Vierundzwanzig Auslosungen, null gemeinsame Ausrichtungen

7. September

Der Prüflauf verlangt zweierlei: dass zwei Länder eine Endrunde nur ausnahmsweise gemeinsam ausrichten — und dass es mindestens einmal vorkommt. Die zweite Zeile schlug an: in 24 Auslosungen kein einziges Mal.

Die Länderkennungen kommen groß geschrieben aus den Ligadaten, meine Nachbartabelle stand klein. Die Bedingung konnte nie zutreffen.

Mit nur der ersten Zeile wäre der Prüflauf grün geblieben — null Treffer sind ja höchstens die Ausnahme. Es ist dasselbe Muster wie die Warnung von gestern, die in jedem Lauf ansprang, nur spiegelverkehrt: Eine Bedingung, die nie zutrifft, sieht genauso unauffällig aus wie eine, die immer zutrifft. Beide Male sagt die Kennzahl nichts, und beide Male sieht sie ordentlich aus.

Die laufende Weltmeisterschaft überlebte das Speichern nicht

7. September

Beim Einbau fiel auf, dass die Endrunden selbst nie gesichert wurden. Wer während einer WM speicherte, fand danach keine mehr vor: Gruppen, Tabellen, K.-o.-Runde, alles weg.

Derselbe Fehlertyp zum vierten Mal: generisch laden, von Hand speichern. Was auf der Speicherseite fehlt, ist lautlos weg — und ein fehlender Bereich sieht beim Laden aus wie einer, in dem eben nichts passiert ist. Genau deshalb ist der Fehler so langlebig: Er erzeugt kein Symptom, sondern eine Leere, die plausibel wirkt.

Bei der WM hatten alle Heimvorteil — und zwar der Reihe nach

6. September

Die Frage kam von außen und war die richtige: Bei einer WM oder EM spielt doch nur der Gastgeber wirklich zu Hause. Die anderen haben Fansupport, aber keinen Heimvorteil — sie sind Gäste im selben Land.

Das Spiel kannte den Fall nicht. Jede Partie hatte eine Heimmannschaft, und das war schlicht die, die zuerst genannt wurde. Ich habe zwei Nationen mit exakt gleichem Kaderwert 4.000-mal gegeneinander spielen lassen — ohne diese Kontrolle misst man den Stärkeunterschied statt des Platzes.

WM-Endrunde: Siege des zuerst Genannten
43,9 %
37,7 %
… des zuletzt Genannten
30,4 %
36,4 %

Die Größenordnung war nie falsch, nur der Ort. Real gewinnt die Heimmannschaft rund 45 % ihrer Spiele — für ein echtes Heimspiel stimmt der Zuschlag also, und in der Qualifikation bleibt er unverändert. Der Gastgeber behält ihn auch, in jedem seiner Spiele; er spielt das Turnier ja im eigenen Land.

Der eigentliche Ärger steckte woanders. In der Gruppenphase werden die Partien der Reihe nach erzeugt, und an erster Stelle steht der höher gesetzte Verband. Der Vorteil lag damit nicht zufällig verteilt, sondern systematisch auf der stärkeren Seite — er legte sich auf die Setzliste obendrauf. Das ist kein Rauschen, das ist eine Verstärkung.

Die Arbeit war nicht der Schalter, sondern die Ausnahmen

6. September

Derselbe Zuschlag — 14,5 von rund 100 Punkten Mannschaftsstärke — lag auch im größten Vereinsspiel des Jahres auf einer zufällig gezogenen Seite. Neutral sind jetzt: das Endspiel des Champions Cup, ein einspieliges Pokalendspiel, die zentral ausgetragene Endrunde in Asien und das Endspiel in Südamerika.

Und ausdrücklich nicht überall. Das nord- und mittelamerikanische Endspiel steigt beim Höhergesetzten zu Hause. Das afrikanische geht über zwei Partien — zwei echte Heimspiele.

Das ist bei so einer Änderung die eigentliche Arbeit: nicht der Schalter, sondern die Liste der Fälle, in denen er nicht umgelegt werden darf. Alles mitzunehmen wäre bequem gewesen und hätte vier Wettbewerbe verfälscht. Beide Ausnahmen stehen jetzt als Gegenprobe im Prüflauf — damit sie nicht beim nächsten Aufräumen doch noch mitgenommen werden.

Die Warnung sprang in jedem einzelnen Lauf an — und blieb trotzdem unsichtbar

6. September

Zwei Kontinentalpokale spielten ein Format, das es real nicht mehr gibt. Der CONCACAF Champions Cup hatte eine Gruppenphase — er ist seit 2024 reines K.o. mit 27 Vereinen, von denen fünf ein Freilos bekommen. Die asiatische Champions League spielte vier Gruppen zu sechs statt zweier Regionalzonen zu zwölf. Beides stand im Quelltext sogar als „vereinfacht" markiert.

Nach dem Umbau lief alles grün. Und meldete bei jedem Durchlauf: „Länderschutz nicht erfüllbar, wird gelockert." Der Wettbewerb fiel still auf die schwächere Auslosung zurück, und sämtliche Prüfungen blieben trotzdem grün — weil keine von ihnen den Länderschutz überhaupt gemessen hat.

Die Ursache war keine schwache Suche, sondern eine Unmöglichkeit, und sie saß in meiner eigenen Annahme. Ich hatte die Topfregel vom europäischen Wettbewerb übernommen: die stärksten sechs in Topf eins. Der asiatische Verband setzt anders — den besten Verein jedes Landes. Nach Stärke gesetzt landen alle drei saudischen Vereine gemeinsam in Topf eins, und dann braucht jeder von ihnen vier Gegner aus einem Topf, in dem nur drei zulässige stehen.

Läufe mit gelockertem Länderschutz
alle
keiner

Zwei Lehren, und die zweite ist die teurere. Eine Warnung, die immer anspringt, ist so wertlos wie eine, die nie anspringt. Und ich habe das Format vorher nachgeschlagen statt es aus dem Gedächtnis nachzubauen — genau deshalb ist der Fehler aufgefallen. Wer ein Regelwerk aus der Erinnerung baut, baut seine Erinnerung nach, nicht das Regelwerk.

Die halbe Gruppenphase wurde nie gespielt

6. September

Der Fund kam nebenbei heraus, weil die Wochenverarbeitung für die neue asiatische Ligaphase ohnehin umgebaut werden musste. Sie spielte je Gruppe ein Spiel pro Spieltag.

Eine Vierergruppe hat aber zwölf Partien. Nach sechs Spieltagen waren sechs davon gespielt — jeder Verein hatte rund drei statt sechs Gruppenspielen. Die Tabelle, die über das Achtelfinale entschied, stand über einer halb ausgetragenen Gruppe. In vier von sechs Kontinentalpokalen, seit es sie gibt.

Gruppenspiele je Verein
rund 3 von 6
6 von 6

Die Zahl der Spieltage wird jetzt gezählt, nicht geschrieben. Vorher stand dort eine feste Sechs. Die passte weder zu den zwölf Partien einer Vierergruppe noch zu den acht Spieltagen der neuen Ligaphase — und eine Konstante, die zu zwei verschiedenen Dingen nicht passt, fällt niemandem auf, solange niemand nachzählt.

Jede Insolvenz zog die ganze Liga ein Stück mit hinunter

6. September

Über acht Saisons sah die Wirtschaft gesund aus. Über dreißig ging jeder zwanzigste Verein pro Jahr pleite, und die Zahl stieg von Saison zu Saison — von 18 auf 74. Der Ruf der ersten Liga fiel dabei von 71 auf 41; in acht von acht Ländern stand am Ende die zweite Liga besser da als die erste.

Die Ursache war eine Rückkopplung, die niemand gebaut hatte. Eine Insolvenz kostet den Verein acht Rufpunkte. Der Ruf ist aber eine relative Größe — er kreist um den Schnitt seiner Liga, und an diesem Schnitt hängen Sponsoren, Ticketpreise und Zuschauer. Ein einseitiger Abzug senkt also nicht nur den Verein, sondern die Liga. Weniger Sponsorengeld heißt mehr Insolvenzen, und die nächste Runde beginnt.

Ruf der ersten Liga nach 30 Saisons
41
67

Jetzt wird der Gegenwert punktweise auf die übrigen Vereine derselben Liga verteilt: Ein Skandal lässt den Verein hinter seine Rivalen zurückfallen, statt das Ansehen der Liga zu senken. In beide Richtungen — ein Stadionausbau hebt genauso einseitig.

Meine erste Vermutung war falsch. Ich hatte den Verein verdächtigt, der nach einer Auflösung nachrückt — er bringt ja seinen niedrigeren Ruf mit. Gemessen ist es umgekehrt: Der Aufgelöste ist der schwache, der Nachrücker der beste der Liga darunter. Die erste Liga gewinnt dabei sechs Punkte. Hätte ich die Vermutung ohne Messung umgesetzt, hätte ich am falschen Ende gedreht — und der Zähler mit der richtigen Antwort lief seit Tagen im selben Durchlauf mit.

Ich habe 63 von 109 Prozent gemessen

6. September

Im Fußball gilt: Wer mehr als 60 bis 70 Prozent seiner Einnahmen für Gehälter ausgibt, hat ein Problem. Die Zahl stand in meiner Messreihe, sie lag bei gesunden 63 Prozent — und trotzdem ging jeder zwanzigste Verein pleite. Das passt nicht zusammen, also musste die Kennzahl falsch sein, nicht die Welt.

Sie war es. Die Marke aus der Wirklichkeit meint den gesamten Personalaufwand. Ich hatte sie gegen die Spielergehälter allein gehalten. Mit Trainerstab und Verwaltung sind es 81 Prozent, mit Prämien, Gebäuden, Spieltagskosten und Transfers 109 — der Erstligist war in jedem gemessenen Zustand strukturell defizitär.

Kosten eines Erstligisten, gemessen an seinen Einnahmen
109 %
102 %
Insolvenzen je Saison
5,6 %
2,5 %

Der Fehler ist ein alter Bekannter — eine Kennzahl aus einer Menge als Maßstab für eine andere. Er ist mir in diesem Projekt inzwischen elfmal begegnet: zwischen Ligaebenen, zwischen Testlauf und Welt. Neu war nur, wo er diesmal saß — zwischen Spiel und Wirklichkeit. Das ist die Stelle, an der man am wenigsten damit rechnet, weil die Vergleichszahl ja echt ist.

Die Weltmeisterschaft las ihre eigene Qualifikation nicht

6. September

Die WM-Qualifikation im Spiel ist detailliert: echte Startplätze je Kontinentalverband, Gruppen, Tabellen, fünf Spieltage. Am Ende rechnet sie aus, wer sich qualifiziert hat, legt das Ergebnis ab und meldet es in der Konsole.

Gelesen hat es niemand. Die Endrunde nahm die 48 besten der Weltrangliste. Wer sich qualifiziert hatte, aber schlecht platziert war, blieb draußen; wer gescheitert war, spielte trotzdem. Als Nationaltrainer konnte man eine WM nicht verpassen.

Bei der EM war es fester verdrahtet: eine Liste von 24 Ländern im Quelltext, dieselben in jeder Ausgabe, für immer. Island, Wales, die Slowakei und Georgien konnten nie teilnehmen. Und eine Auswertung der EM-Qualifikation gab es überhaupt nicht — zehn Gruppen wurden vollständig ausgespielt und nie ausgewertet.

Dasselbe Muster wie bei den Sperren, die verhängt und nie ausgewertet wurden, und den Prämien, die nur der eigene Verein bekam: Ein System rechnet sein Ergebnis aus, legt es ab — und niemand holt es ab. Dazu kam die Nations League, die ihre Ligen A bis D vor jedem Durchgang neu aus der Weltrangliste schnitt. Ein Gruppensieg in Liga C war damit folgenlos; genau das ist der Sinn des Wettbewerbs.

211 Vereine spielten eine ganze Saison, ohne einen Cent Eintrittsgeld zu sehen

5. September

Dauerkarten haben im Spiel einen Deckel: Ein Verein darf höchstens 55 % seiner Plätze im Sommer verkaufen. Der Rest ist Tageskasse — und die ist der Grund, warum sportlicher Erfolg während der Saison Geld bringt.

Der Deckel hing an der Stadionkapazität. In den unteren Ligen liegt die Auslastung aber bei rund 30 %: Der Vorverkauf deckte dort die komplette Zuschauerzahl ab, und für die Tageskasse blieb nichts übrig. Die Vereine haben also gespielt, gewonnen, sind aufgestiegen — und am Spieltag kam kein Geld herein.

Vereine mit Eintrittsgeld
365 von 591
591 von 591

Warum das keiner gemerkt hat: Im Kommentar über der Zeile stand die Gefahr wörtlich beschrieben — „ein Verein, der sein Stadion voll vorverkauft hat, verdient am Spieltag nichts mehr, deshalb der Deckel". Der Deckel war da. Er hat nur nicht das gedeckelt, was er sollte. Ein Kommentar ist kein Nachweis.

Die Weihnachtsfeier eskalierte im Juli

5. September

Im Spiel passieren Dinge neben dem Platz: Ein Spieler verpasst das Training, die Familie beschwert sich über die Arbeitszeiten, der Vorstand wird nervös. Jedes dieser Ereignisse kann Bedingungen haben — „nur im Dezember", „nur nach fünf Niederlagen in Folge", „nur wenn die Beziehung schon schlecht läuft".

Neun dieser Bedingungen wurden nie geprüft. Sie standen in den Daten, sahen aus wie Bedingungen, und die Funktion, die sie auswerten sollte, kannte sie schlicht nicht. Unbekanntes wurde stillschweigend übergangen.

„Entlassung droht" (nach 5 Niederlagen)
feuerte nach 5 Siegen
prüft die Serie
„Weihnachtsfeier eskaliert"
feuerte im Juli
nur im Dezember
„Scheidung droht" (Bindung unter 20)
feuerte bei Bindung 95
prüft die Bindung

Wichtiger als die neun Korrekturen ist der Wächter, der jetzt danebensteht: Eine Bedingung, die niemand auswertet, meldet sich künftig von selbst. Sonst passiert derselbe Fehler beim nächsten Ereignis wieder — und wieder fällt es fünf Monate lang niemandem auf.

Vereine spielten international und für ihr Land in derselben Woche

5. September

Der Spielplan kennt Europapokalwochen und Länderspielpausen. In vier Wochen der Saison lagen beide übereinander — die Vereine spielten dienstags in Europa, und gleichzeitig waren ihre Nationalspieler unterwegs. Das gibt es in der Wirklichkeit nicht.

Die Ursache war nicht der Kalender, sondern die Buchhaltung darüber: Dieselben Termine standen an vier Stellen im Code, und drei davon waren Abschriften. Eine trug den Hinweis „abgelesen aus …" im eigenen Kommentar. Wer eine Liste ändert, ändert die anderen nicht mit.

Beim Aufräumen fiel auf, dass die Termine auch inhaltlich falsch lagen: zehn Länderspielpausen statt der realen fünf, neun davon in der ersten Saisonhälfte, das komplette Frühjahr frei. Jetzt sind es fünf, verteilt über September, Oktober, November, März und Juni — und alle liegen auf Wochen, in denen kein Europapokal stattfindet.

Die WM-Auslosung setzte Gruppengegner gegeneinander — aber nur manchmal

5. September

Nach der Gruppenphase einer Weltmeisterschaft dürfen zwei Mannschaften aus derselben Gruppe in der nächsten Runde nicht sofort wieder aufeinandertreffen. Der Prüflauf meldete genau das — aber nur in zwei von drei Durchgängen. Weil es unregelmäßig auftrat, sah es nach Zufall aus.

War es nicht. Die Auslosung ging die gesetzten Mannschaften der Reihe nach durch und gab jeder den ersten passenden Gegner. Am Ende blieben zwangsläufig Paare übrig, die nicht mehr durften — und dann wurde die Regel gebrochen. Mehr Mischen hätte nichts geholfen; das ist kein Zufallsproblem, sondern ein Zuordnungsproblem.

Jetzt kommt zuerst dran, wer die wenigsten möglichen Gegner hat, und eine Sackgasse wird durch Tausch mit einer schon gebildeten Paarung aufgelöst. Fünf Durchgänge, fünfmal sauber.

„KW 54" stand auf jedem Bildschirmfoto

4. September

Aufgefallen ist es nicht im Spiel, sondern auf dieser Website: In der Kopfzeile der Bilder stand „Montag, 10. Juli 2028 · KW 54". Ein Jahr hat 52 oder 53 Kalenderwochen. Eine 54. gibt es nicht.

Dort stand die Saisonwoche, beschriftet als Kalenderwoche. Die Zeile steht auf jedem Bildschirm des Spiels — und damit auf jedem Bild, das je davon gezeigt wird.

Nach der Korrektur zeigte der Kopf „KW 27" und der Wochenkalender darunter „KW 1". Derselbe Widerspruch, nur umgezogen. Gefunden hat ihn kein Prüflauf, sondern der Blick auf den fertig gezeichneten Bildschirm — direkt nach der ersten Korrektur.

Fragen oder Anmerkungen? Schreib mir — ich antworte selbst, es gibt hier niemanden sonst.