Entwicklungstagebuch, Teil 6 · 11. und 12. August 2026
Bernd schuldete 35,54 Euro. Die App sagte 35,53.
Der Cent war das kleinste Problem dieser zwei Tage.
Der Plan für die Woche war ein anderer. Der Produktfilm war fertig, die Seite dazu gebaut, und ich wollte die letzten Ungereimtheiten aus der App räumen, bevor die Beta breiter läuft. Neun Punkte hatte ich mir aufgeschrieben, nachdem ich einen Abend lang mit dem iPad durch alle Bereiche gegangen war.
Zwei Tage später waren sieben davon erledigt. Die Hälfte der Zeit war für etwas draufgegangen, das mit der Liste nichts zu tun hatte.
Die Rechnung, die dreitausendmal nicht aufging
Die Bordkasse rechnet die Ausgaben eines Törns auf die Crew um. Drei Personen, vier Ausgaben, 211,30 Euro. Bernd überweist 33,57 an den Skipper und 1,97 an Anna. Macht 35,54. Bernd schuldet aber 35,53.
Ein Cent. Bei drei Leuten und einem Wochenende ist das egal. Bei sechs Crewmitgliedern und zwanzig Ausgaben über eine Saison ist es kein Cent mehr — und dann sitzt man abends im Cockpit und rechnet nach, warum es nicht aufgeht. Genau das soll die App einem abnehmen.
Die Ursache war das Rechnen mit Kommazahlen: Jeder Anteil wird geteilt, jede Überweisung einzeln gerundet, und die Reste verschwinden nach oben.
Umgestellt auf ganze Cent. Der unteilbare Restcent geht reihum, damit über viele Ausgaben hinweg niemand systematisch draufzahlt.
Wie verbreitet der Fehler war, zeigte ein Testlauf über fünftausend zufällige Abrechnungen mit zwei bis sieben Personen: In gut dreitausend Fällen ging die alte Rechnung nicht auf. Bei der neuen in keinem.
Dazu zeigt die Abrechnung jetzt eine Bilanz — wer hat wie viel gezahlt, wie viel getragen, wie ist sein Saldo. Und unten die Summe, die null sein muss. Wenn nicht, wird die Zeile rot und nennt den Betrag.
Ich will nicht, dass die App eine Zahl behauptet, die man ihr glauben muss.
Der Nachmittag, an dem das Design weg war
Am Dienstag öffnete ich die App, und sie sah aus, als hätte jemand die Gestaltung gelöscht. Riesige Schrift, keine Seitenleiste, Elemente ohne Abstände.
Ein paar Stunden Arbeit dahin, und ich war entsprechend gut gelaunt.
Die Ursache: Die neue Formatierung für die Bordkasse war an eine alte Fassung meiner Stilvorlage angehängt worden — an einen Projektstand aus dem Juli, nicht an die Datei, die tatsächlich auf dem Server lag. Zwischen beiden liegen sechs Versionen und rund fünfundsiebzig Kilobyte. Alles, was seitdem dazugekommen war, war weg: Wetterumschaltung, Modellvergleich, Hafensuche, Modulübersicht, Einrichtungsdialog.
Das Ärgerliche war nicht der Fehler. Das Ärgerliche war, was danach passierte.
Weil der Einrichtungsdialog plötzlich unformatiert dastand, haben wir eine Stunde lang gesucht, warum für ihn nie eine Gestaltung geschrieben worden sei — und schließlich eine neue geschrieben.
Sie war die ganze Zeit vorhanden gewesen.
Wir haben ein Symptom behandelt, das wir selbst verursacht hatten.
Gerettet hat mich eine Sicherung von Sonntagabend. Bitgleich, alles wieder da.
Der Ordner war nicht der Server
Ich lade meine Dateien aus einem iCloud-Ordner hoch. Also war ich sicher, dass dort dasselbe liegt wie oben auf dem Server.
Tat es nicht. Bei zwei Dateien lag ein alter Stand, vier fehlten ganz.
Wir haben eine Stunde auf Grundlage einer Datei diskutiert, die mit meiner nichts zu tun hatte, und dabei Fehler „gefunden“, die längst behoben waren. Die Bugrollenhöhe, ein fest eingetragener Bootsname, der Profilknopf — lauter Phantome aus einer Fassung von Ende Juli.
Das war der Moment.
Und der Grund war kein hehrer. Ich wollte die Arbeit einfach nicht mehrfach machen.
Ich hatte inzwischen mehrmals dieselben Dateien hochgeladen — und jedes Mal war die Maschine anderer Meinung darüber, was oben liegt. Man lädt hoch, bekommt gesagt, das könne nicht sein, lädt wieder hoch, sucht in einer Datei nach einem Fehler, den es dort längst nicht mehr gibt. Irgendwann ist das keine Fehlersuche mehr, sondern nur noch Beschäftigung.
Seitdem verlange ich Prüfsummen. Und ich lasse online nachsehen, ob tatsächlich alles oben steht, was oben stehen soll — nicht was ich hochgeladen zu haben glaube, nicht was im Ordner liegt.
Die Lösung war ein Zweizeiler im Terminal. Statt aus der Wolke hochzuladen, hole ich mir den Stand seither vom Server herunter: ein Befehl, vierundachtzig Dateien, 1,7 Megabyte. Damit ist ausgeschlossen, dass jemand auf einem Stand arbeitet, den es nicht gibt. Und ich habe nebenbei eine Sicherung, die dem Server wirklich entspricht.
Dazu die Angewohnheit, die mir seitdem den meisten Ärger erspart: Nach jeder Lieferung frage ich die Prüfsumme ab — eine Zahlenfolge, die sich ändert, sobald sich ein einziges Zeichen ändert. Stimmt sie, liegt genau die Datei oben, die liegen soll.
Drei Sekunden. Und sie ersetzt jedes „müsste eigentlich“.
Bei der Hauptdatei hatten wir die Prüfsumme von Anfang an abgefragt. Dort ist nichts kaputtgegangen. Bei der Stilvorlage nicht — und genau dort ging es schief.
Hundertsechzehn Seemeilen, die es nicht gibt
Der Beispieltörn führt von Warnemünde nach Gedser. Er stand mit achtundfünfzig Seemeilen je Schlag in den Daten, hundertsechzehn gesamt, gefahren in fünfundzwanzig Stunden.
Zwischen Hohe Düne und Gedser liegen fünfundzwanzig Seemeilen. Mit Hafenmanövern siebenundzwanzig.
Eine erfundene Zahl in den eigenen Beispieldaten. Wer die App zum ersten Mal öffnet, sieht genau das.
Die Karte, die von Schweden bis Libyen zog
Zum Saisonrückblick gehört eine Karte. Eine Linie ohne Küste sagt niemandem, wo man war — das ist etwas zum Aufheben, nicht nur zum Ablegen. Also liegen jetzt Kartenkacheln darunter, aus demselben Zwischenspeicher wie in der App.
Beim ersten Versuch zog die Karte von Schweden bis Libyen.
Einer meiner Testeinträge hatte keine GPS-Position, und im Feld stand eine Null. Null ist eine gültige Zahl, also wurde daraus null Grad Nord, null Grad Ost — ein Punkt im Golf von Guinea, den Programmierer „Null Island“ nennen.
Die Prüfung fragte, ob es eine Zahl ist. Sie fragte nicht, ob es ein Ort sein kann.
Auch das ist niemandem aufgefallen, solange der Hintergrund grau war.
Nachtrag vom 28. August: Diese Prüfung wurde an dem Tag eingebaut und steht seitdem in einer Datei, mit einem langen Kommentar davor, der genau dieses Problem beschreibt — bis hin zu dem Satz, dass die Karte sich von Schweden bis Libyen aufzieht. Sechzehn Tage später fand ich denselben Fehler an drei anderen Stellen wieder. Eine davon war die GPX-Ausfuhr: Meine Saison hätte achtundzwanzig Punkte vor Westafrika enthalten, in einer Datei, die man weitergibt. Die Regel gab es. Drei Stellen kannten sie nicht.
Was mich am meisten gekostet hat
Nicht die Fehler in der App. Die waren in Minuten behoben, sobald klar war, wo sie sitzen.
Gekostet hat mich die Arbeit an Dateien, die nicht meine waren. Zwei Tage, in denen ich Fehler gemeldet habe, die es nicht mehr gab, und in denen eine Korrektur eine funktionierende Datei überschrieben hat.
Bevor du etwas änderst, stelle fest, was tatsächlich läuft. Nicht was du hochgeladen zu haben glaubst, nicht was im Ordner liegt, nicht was letzte Woche stimmte. Was jetzt auf dem Server liegt.
Drei Sekunden für eine Prüfsumme. Ich habe zwei Tage gebraucht, um mir das anzugewöhnen.
← Zurück zum Entwicklungstagebuch
PELARON entsteht an Bord der Bluebaerry und am Schreibtisch in Erfurt. Fragen, Widerspruch und Fehlermeldungen sind willkommen.