“WTF Moments” nenne ich Augenblicke, in denen man angesichts von technischen “Meisterleistungen” vor Staunen sprachlos ist. Hier sind drei Beispiele aus meiner Erfahrung.
Ein wichtiger Wert landet in einem XML-Kommentar. Wir waren ziemlich stolz darauf, dass unsere quantitativen Daten nicht in einem proprietären Binärformat abgelegt waren, sondern in XML – offen und für alle Kunden lesbar. Im Prinzip konnte also jeder die von unserer Software erzeugten Daten mit eigenen Mitteln weiterverarbeiten. Als ich mir zufällig eine unserer Dateien ansah, klappte mir die Kinnlade runter. Der Programmierer hatte eine wichtige Quantität in XML-Kommentaren abgelegt, also in einem Abschnitt, den man eigentlich ignorieren kann. Das wäre extrem peinlich geworden – jeder, der mit etwas Sachverstand darauf schaut, hätte gesehen, dass hier echte Dilettanten am Werk waren. Wir haben das zum Glück noch vor dem Release korrigieren können.
Schwarz ist weiß und weiß ist schwarz. Unsere Software analysierte Bilder, höhere Schwärzung eines Bildpunktes bedeutete eine höhere Quantität einer gewissen Substanz. Nur nicht bei einem speziellen Bild-Dateiformat. Da hatten wir es geschafft, die Interpretation der Grauwerte genau falschherum zu machen, so als wären weiß und schwarz vertauscht worden. Das fiel tatsächlich bei uns niemandem auf. Als schließlich ein Pilotkunde die Werte hartnäckig hinterfragte, wollten wir es zuerst nicht glauben. Mit unserer grundsoliden Quantifizierung soll etwas nicht stimmen? Da hat bestimmt der Anwender was falsch verstanden. Und siehe da, wir hatten alles richtig gemacht, bis auf diese “Kleinigkeit”: schwarz und weiß waren verwechselt.
Alles UTC, oder was? Der Umgang mit Zeitzonen ist immer etwas heikel. Wenn man einfach nur 8:15 Uhr abspeichert, gibt es schnell Missverständnisse, sobald sich die Anwendung über mehrere Zeitzonen erstreckt. Daher ist es oft üblich, Zeiten in der Zeitzone UTC (früher Greenwich Mean Time, GMT) abzulegen. Sie werden dann im User Interface zur Anzeige automatisch in die Zeitzone des Benutzers übersetzt (z.B. Central European Time, CET). In unserer Datenbank waren alle Zeiten in UTC abgespeichert. So soll es sein, und so ist es in Ruby on Rails schon vorbereitet. Alle außer drei Zeiten, bei denen stand zwar UTC in der Datenbank, aber es war Mitteleuropäische Zeit gemeint. Da nehmen wir den Zeit-Wert in UTC und machen allerlei Klimmzüge, um die Uhrzeit als Mitteleuropäische Zeit (ggf. auch Sommerzeit) zu interpretieren.
Es geht immer mal was schief, es wird also immer mal wieder WTF Moments geben. Ich versuche dann erstmal durchzuatmen. Die natürliche Reaktion ist ja, zu fragen, wer das verbockt hat. Das ist wenig produktiv, statt dessen sollte man den Schaden (falls denn einer entstanden ist) nüchtern analysieren. Danach kommt die möglichst unaufgeregte Ursachenforschung, inklusive der Frage “Warum haben wir das jetzt erst gemerkt?”. Daraus gibt es eigentlich immer was für die Zukunft zu lernen, wie z.B. dass externe Datenformate immer nochmal unabhängig vom jeweiligen Entwickler geprüft werden sollten. Oder dass man gewisse Funktionalitäten End-to-End testen sollte, mit Testfällen, bei denen das erwartete Ergebnis unabhängig von der selbst entwickelten Software bestimmt wird. Diese Lehren sollte man dann möglichst breit verteilen, damit aus einem WTF Moment mit etwas Glück ein “Teachable Moment” wird.
Matthias Berth