Schlagwort: Lokales LLM

Von Karteikarten zur App (3/3): Was schiefging, und was ich gelernt habe

Im zweiten Teil ging es darum, was die App kann. Jetzt der unangenehmere Teil: was dabei kaputtging, wer daran schuld war und was davon sich auf einen Kanzleischreibtisch übertragen lässt.

Die Arbeitsteilung

Fangen wir mit dem Begriff an, der gerade durch jede Diskussion geistert: „Vibe Coding“: Man beschreibt, was man haben will, übernimmt das Ergebnis und schaut nicht hin.

So lief es hier nicht. Die Anforderungen kamen von mir, die Entscheidungen auch: Was ist ein eigener Datensatz? Wie hängen Erweiterungen am Grundspiel? Welche Reihenfolge hat der Redaktionsexport? Code und Struktur kamen von Claude. Und dann wurde jede Datei eingebaut, gestartet, ausprobiert und wenn es klemmte, gemeinsam diagnostiziert.

Das ist ein wichtiger Unterschied. Nicht weil ich den Code Zeile für Zeile geprüft hätte, das kann ich in Swift schlicht nicht. Sondern weil ich jederzeit wusste, was die App tun sollte, und deshalb sofort merkte, wenn sie etwas anderes tat. Fachliche Kontrolle ersetzt keine technische Prüfung, aber sie fängt erstaunlich viel ab.

Was das Modell falsch gemacht hat

Drei Fehler haben mich echte Zeit gekostet, und alle drei waren lehrreich.

Der erste war der teuerste, weil er „leise“ war. Mehrfach wurden neue Datenfelder angelegt, ohne sie als optional zu kennzeichnen. Die Folge: Beim Start scheiterte das Laden der alten Sicherungs- bzw. Exportdaten, die kannte das neue Feld ja nicht, und die App zeigte nur ihre alten Beispieldaten an. Kein Fehler, keine Meldung, nur plötzlich falsche Spiele in meinem Regal. Wer nicht weiß, dass es Beispieldaten gibt, denkt an dieser Stelle, seine Sammlung sei weg.

Der zweite war handwerklich. Einmal wurden vier Dateien gleichzeitig umgebaut, ohne die davon abhängigen mitzuziehen. Das Ergebnis war eine Fehlerkaskade, deren Ursprung sich erst nach längerem Suchen zurückverfolgen ließ.

Der dritte war ein Ratschlag. „Dupliziere das Projekt als Sicherung, bevor du das umbaust.“ Klingt vernünftig. In Swift Playground führte es dazu, dass der Datencontainer beim Kopieren nicht mitkam. Die Sicherung war also genau das Problem. Ein gut gemeinter Rat, der die Lage verschlechtert hat.

Das ist der Punkt, den ich für die wichtigste Erkenntnis der zehn Tage halte: Die gefährlichen Fehler sind nicht die, bei denen etwas rot aufleuchtet. Es sind die, bei denen alles normal aussieht.

Was das Werkzeug falsch gemacht hat

Um fair zu bleiben: Der größere Teil des Ärgers ging nicht auf das Modell zurück, sondern auf die Umgebung.

Swift Playground ist für Lernprojekte mit drei Dateien gebaut. Meine App hat inzwischen dreißig. In dieser Größenordnung traten immer dieselben Symptome auf: Dateien, die sich partout nicht registrieren ließen. Umbenennungen, die nach einem Neustart wieder zurücksprangen. Und eben jene Datencontainer, die beim Kopieren verlorengingen.

Der Tiefpunkt: Ein verrutschtes Einfügen löschte zwei Dateien. Kein Papierkorb, keine Historie, keine Rücknahme. Drei Stunden Wiederherstellung, für einen Fehlgriff von einer Sekunde.

Die wichtigste Lehre

Nach drei Tagen hatte sich eine Regel herausgeschält, die den Rest des Projekts getragen hat: immer komplette Dateien, nie Teiländerungen.

„Ersetze in Zeile 47 den Ausdruck durch…“ klingt effizient und ist die häufigste Fehlerquelle überhaupt. Man fügt an der falschen Stelle ein, übersieht eine Klammer, oder die Beschreibung passt nicht mehr, weil sich die Datei zwischenzeitlich geändert hat. Eine vollständige Datei dagegen ist eindeutig: markieren, ersetzen, starten. Sie kostet mehr Zeichen und spart Stunden.

Wem gehören eigentlich die Daten?

Ein Exkurs, der über das Projekt hinausgeht und der euch als Spielerinnen und Spieler direkt betrifft.

BoardGameGeek verlangt seit dem letzten Jahr eine Registrierung für seine Schnittstelle. Das ist verständlich und für nicht-kommerzielle Zwecke kostenlos; die Auflage ist im Wesentlichen das „Powered by BGG“-Logo. Nur: Die Schnittstelle liest. Sie schreibt nicht. Meine 150 Spiele kann ich aus BGG in meine App holen. Meine eigene Sammlung dort zu pflegen bleibt Klickarbeit, Titel für Titel.

Bei Kickstarter und Gamefound ist es schlichter: Dort gibt es gar keine offene Schnittstelle. Alles, was ich über meine unterstützten Projekte weiß, habe ich selbst zusammengetragen: aus Mails, Screenshots und einer über Jahre gepflegten Tabelle. Deshalb betreiben wir hier auf dem Blog überhaupt Crowdfunding-Archäologie: Was die Plattformen nicht herausgeben, verschwindet mit ihnen.

Man merkt es beim Bauen deutlicher als beim Benutzen. Die eigenen Daten liegen in fremden Häusern, und die Tür geht nur in eine Richtung auf.

Was ich für die Kanzlei mitnehme

Vier Dinge, und keines davon hat mit Swift zu tun.

Das Datenmodell schlägt die Syntax. Wer weiß, wie ein Sachverhalt strukturiert ist, kommt mit einem Modell weit, auch ohne die Sprache zu beherrschen. Wer es nicht weiß, bekommt sehr schnell sehr viel Code, der das Falsche tut.

Die Prüfpflicht wandert, sie verschwindet nicht. Ich musste den Code nicht schreiben. Aber ich musste wissen, was herauskommen sollte, und das Ergebnis dagegen halten. Genau so wird es bei jedem KI-Einsatz im Beruf sein.

Stille Fehler sind das eigentliche Risiko. Eine Fehlermeldung ist harmlos, sie zwingt zum Hinsehen. Ein plausibles falsches Ergebnis ist es nicht. Das gilt für Beispieldaten in einer Spiele-App genauso wie für alles, was in einer Kanzlei plausibel aussieht.

Sicherung und Versionierung sind keine Kür. Die drei Stunden Reparatur wären mit einer ordentlichen Versionsverwaltung ein einziger Befehl gewesen. Ich habe das dreißig Jahre lang für ein Entwicklerthema gehalten. Es ist eine Arbeitstechnik.

Wie es weitergeht

Der Mac mini ist bestellt. Damit wird aus Swift Playground Xcode, aus „bloß nichts kaputtmachen“ eine Versionsverwaltung mit Git, und aus einer App auf einem iPad eine App auf mehreren Geräten, über CloudKit für die gemeinsamen Daten und TestFlight für die Verteilung an Familie und Redaktion.

Denn das ist die eigentliche Lücke im jetzigen Stand: Die App liegt auf einem iPad. Josef und Maja können ihre Ranglisten nicht pflegen, ohne dass ich ihnen das Gerät reiche. Für ein Werkzeug, dessen ganzer Witz die verschiedenen Perspektiven auf dieselbe Sammlung sind, ist das ein Konstruktionsfehler.

Und dahinter wartet das Thema aus dem ersten Teil: ein lokal betriebenes Sprachmodell. Wer erst einmal gesehen hat, wie viel Arbeit ein Modell abnehmen kann, versteht besser, warum die Frage, wo es läuft und was mit den Eingaben passiert, keine technische Randnotiz ist.

Und die Karteikarten?

Die liegen noch irgendwo zu Hause in einer Schachtel. Ich werde sie suchen, wenn wir aus dem Urlaub zurück sind – nicht nur aus Nostalgie, sondern weil die alten Spiele auch noch in die App müssen. Und weil die Idee damals bereits richtig war, aber so ist es nun einfacher.

Heute fragt uns die App, wer mitspielt und wie viel Zeit wir haben. Herauskommt dasselbe wie damals: ein Spiel, das neutral vorgeschlagen wird und deshalb keine Diskussion auslöst.

Manchmal braucht eine gute Idee eben dreißig Jahre Technikgeschichte, um richtig zu funktionieren.

Von Karteikarten zur App (1/3): Warum ein Steuerberater Apps baut

In diesem Artikel wird kein (Brett-)Spiel besprochen, nicht mal ein Computerspiel. Es geht um das Werkzeug, das inzwischen zwischen uns und unserem Regal steht, und um die Frage, warum ich zehn Urlaubsabende und einige Autofahren als Beifahrer darauf verwendet habe, es selbst zu bauen.

Zwei Schreibtische

Ich sitze beruflich an zwei Schreibtischen. Am einen bin ich Steuerberater und Partner der Kanzlei Mußenbrock & Partner mbB. Am anderen entsteht das hier: die Spielwiese der Hügelzelter, seit 2025 unser Blog über Brettspiele, Messen und Crowdfunding.

Auf den ersten Blick haben die beiden Schreibtische wenig gemeinsam. Auf den zweiten sehr viel, denn an beiden <verändert sich gerade dasselbe. Wer heute Mandaten betreut, arbeitet mit Software, die vor fünf Jahren so nicht existierte. Wer heute publiziert, ebenso. Und in beiden Feldern steht dieselbe Frage im Raum: Was macht man eigentlich mit künstlicher Intelligenz, wenn man sie nicht nur ausprobieren, sondern verantwortlich einsetzen will?

Ich habe für mich beschlossen, dass ich diese Frage nicht vom Zuschauerrang aus beantworten möchte. Man versteht ein Werkzeug erst, wenn man damit etwas gebaut hat, das kaputtgehen kann.

1998, und was daraus wurde

Meine erste Homepage habe ich 1998 gebaut. Handgeschriebenes HTML, Tabellenlayout, ein Sammlung animierter GIFs und kein Gedanke an Copyright, Datenschutz oder auch nur Content. Der Stand der Technik seinerzeit genau wie heute war Anlass genug sich daran auszuprobieren. Danach kamen ein Schreibmaschinenkurs und Turbo Pascal; m Studium dann Java, irgendwann VBA in ziemlichem Umfang und SQL zumindest lesend. Nichts davon macht mich zum Entwickler. Aber es hinterlässt eine Art Grundgefühl dafür, wie Daten und Programme zusammenhängen.

So ähnlich sah es damals aus …

Im vergangenen Jahr habe ich mich an die Homepage gemacht, auf der du gerade liest. In diesem Jahr an Apps. Das ist (k)eine Midlife-Krise mit Tastatur, sondern eine Reihenfolge: Erst versteht man, wie man Inhalte ins Netz bringt. Dann, wie man eigene Daten strukturiert. Und irgendwann, wie man beides mit Modellen verbindet, die einem beim Denken helfen.

Das eigentliche Fernziel

Denn die App ist ein Zwischenschritt. Wohin ich eigentlich will, ist ein lokal betriebenes Sprachmodell – KI, die im Haus bleibt.

Der Grund dafür ist berufsbedingt naheliegend. In einer Steuerberatungskanzlei sind die interessantesten Anwendungsfälle immer die mit den heikelsten Daten. Genau dort verbieten sich Dienste, bei denen man nicht mit letzter Sicherheit sagen kann, wo die Eingaben landen und was mit ihnen geschieht. Ein Modell, das auf eigener Hardware läuft, löst dieses Problem an der Wurzel statt über Zusicherungen Dritter.

Bis dahin ist es ein weiter Weg, und ich bin ihn noch nicht zu Ende gegangen. Aber jeder Schritt darauf – Datenmodelle entwerfen, Schnittstellen anbinden, verstehen, wo ein Modell zuverlässig ist und wo es nur zuverlässig klingt – ist ein Schritt, den man einmal gemacht haben muss.

Reine Fingerübungen halten mich nicht am Ball

Nur: Lernen um des Lernens willen funktioniert bei mir nicht. Tutorials mit Beispieldaten sind nach drei Abenden erledigt, weil nichts davon weh tut, wenn es verlorengeht. Ich brauchte ein Projekt, das ich wirklich benutzen würde. Und bei dessen Nutzung, dann auch neue Ideen kommen, also ein Alltagsproblem.

Das lag näher, als ich dachte. Denn bei aller Sortierung im Regal fehlte uns seit Jahren die Übersicht über das eigene Hobby. Vier Fragen, die wir uns immer wieder stellten und nie sauber beantworten konnten:

  • Was haben wir eigentlich alles? Inklusive der Erweiterungen, die in fremden Schachteln stecken.
  • Was mögen wir davon? Und zwar wer genau, denn Josef, Maja und ich sortieren dieselbe Sammlung sehr unterschiedlich. Und das schon seit vielen Jahren.
  • Worüber haben wir schon berichtet? Eine Frage, die sich mit jedem Monat Blog dringlicher stellt.
  • Welche Kampagnen stehen eigentlich noch aus? Bei inzwischen rund 100 unterstützten Projekten auf Kickstarter und Gamefound eine Frage, die niemand mehr aus dem Kopf beantwortet.

Vier Fragen sind noch kein Lastenheft, aber sie sind ein Anfang. Und sie haben den Vorteil, dass falsche Antworten sofort auffallen.

Karteikarten, 2016

Die fünfte Frage ist die älteste und die einfachste: Was spielen wir heute Abend?

Wir haben sie uns vor knapp zehn Jahren zum ersten Mal ernsthaft gestellt, damals noch mit deutlich kleineren Kindern und einem Regal voller Kinderspiele, das keiner mehr überblickte. Meine Lösung war analog: Ich habe von jedem Spiel ein Bild gemacht, die Bilder auf Karteikarten gebracht und die Karten zur Auslosung gestellt. Was gezogen wurde, wurde auch gespielt (Zumindest meistens). Das hat erstaunlich gut funktioniert, denn es nahm die Diskussion aus der Entscheidung und brachte Spiele zurück auf den Tisch, die sonst hinten im Regal verstaubt wären.

Was es nicht konnte: mitzählen. Es wusste nicht, wer wen wie oft geschlagen hat, wie lange ein Spiel wirklich dauert, wann wir es zuletzt gespielt haben und wer es überhaupt mag.

Zehn Jahre später kann das eine App. Sie fragt, wer mitspielt, wie viel Zeit wir haben und worauf wir Lust haben. Danach kommt ein strukturierte Vorschlag: Fünf Titel aus der Schnittmenge der persönlichen Ranglisten vor. Plus einen, den wir lange nicht auf dem Tisch hatten. Die Karteikarten von damals, nur dass sie sich merken, wie der Abend ausgegangen ist und noch etwas Luft für die eigene Entscheidung lassen.

Wie es dazu kam

Gebaut habe ich sie zwischen dem 8. und dem 17. August, im Urlaub, überwiegend abends und nachts. Auf einem iPad. Ohne Mac. Ohne je zuvor eine Zeile Swift geschrieben zu haben. Und mit einem KI-Modell als Gegenüber, das den Code schrieb, während ich entschied, was er können sollte.

Wie das ablief, was am Ende dabei herauskam und wo die Sache gehörig schiefging — davon handeln die beiden folgenden Teile.

Teil 2: Zehn Tage, ein iPad, kein Mac.