Patrik
Kluge Worte der Woche
- Knappheit schafft Klarheit: wenig Zeit hilft, Arbeit (und Leben) zu priorisieren.
- Schreib Code, als müsstest du ihn in einer wissenschaftlichen Arbeit veröffentlichen (Rat von N. Wirth).
Journal
Ich habe die Woche damit verbracht, weitere Kantone zu unterstützen. Normalerweise mag ich diese Arbeit nicht besonders, sie ist immer frustrierend, weil ich zwar die Berechnung auf hoher Ebene verstehe, aber der Teufel im Detail steckt: Ein Kanton hat einen ganz anderen Prozess (VS, ich schaue dich an!) oder entscheidet sich einfach für andere Rundungsfunktionen bei jedem Schritt der Berechnung. Bei kleinen Beträgen ist das kein grosses Ding, aber die Fehler wachsen mit grösseren Zahlen. Und sie lassen die Unit Tests sowieso fehlschlagen. Diese Details richtig hinzubekommen ist schwierig.
Vielleicht hatte ich Glück: Kanton AG lief gut und schnell, also habe ich TI gleich dazu genommen. Sie verwenden eine Standardberechnung, wobei ich hauptsächlich denselben Code wiederverwende, verallgemeinere und anpasse. Nach diesem Refactoring braucht mehr als die Hälfte der Kantone nur noch eine 6-Zeilen-Konfiguration, um die richtigen Rundungsfunktionen auszuwählen. Ich brauche länger für die Unit Tests, um mich selbst davon zu überzeugen, dass der Code korrekt ist.
Ich liebe diesen Teil des Entwicklungsprozesses. Am Anfang ist der Code sehr breit angelegt: Alles ist custom und spezialisiert, gilt nur für einen ganz bestimmten Anwendungsfall und erzeugt viel Code-Duplikation. Mit der Zeit beginne ich die Gemeinsamkeiten zu sehen, was mir erlaubt, den Code zu refactoren und zu verallgemeinern. Das ergibt normalerweise einfacheren, saubereren Code. Code zu verallgemeinern und zu löschen ist wahrscheinlich der befriedigendste Teil der Arbeit. Es ist wichtig, genug Zeit während der Entwicklung für diese Phase einzuplanen, weil man sonst unordentlichen, schwer wartbaren Code hinterlässt und technische Schulden aufbaut.
Also habe ich mich mutig gefühlt und angefangen, auch den Kanton BE hinzuzufügen. Das sollte einfach sein, ist aber natürlich kläglich gescheitert. Der Code war da, aber er funktionierte nicht wie erwartet. Nach ein paar Stunden Suche habe ich schliesslich herausgefunden, dass der Code korrekt war, aber die zugrunde liegenden Daten eines externen Anbieters einen Fehler hatten (eine Tabelle war falsch beschriftet). Eine gute Lektion in Demut.
Wie habe ich AI diese Woche genutzt?
- Ich habe eine grosse Regressionstestsuite mit Golden-Set-Ergebnissen. Es gibt etwa 100 Tests, die prüfen, ob die Simulation das richtige Ergebnis liefert. Da ich die Kern-Engine auf Festkomma-Arithmetik umgestellt habe, habe ich natürlich alle Tests kaputt gemacht. Nicht um viel, meistens nur ein paar Rappen daneben. Jetzt kann ich einfach Cursor sagen, den Output zu nutzen, um mein Golden Test Set zu aktualisieren.
- Ich habe die Autovervollständigung komplett abgestellt: Der Nutzen ist die Nachteile nicht wert. Oft schlägt Cursor Code vor, während ich tippe, und ich füge am Ende ungewollten und fehlerhaften Code hinzu (oft ohne es überhaupt zu merken). In der Leiste unten im Fenster auf ‘Cursor’ klicken und “Disable” wählen. Du kannst natürlich weiterhin den Agent nutzen. Aber zumindest ist das dann absichtlich, nicht versehentlich.
- Etwas offtopic, aber ich nutze Gemini wirklich gern beim Kochen. Ich kann mit einer Zutatenliste für einen Salat anfangen, fragen, welche Sauce gut dazu passen würde, und mir etwas vorschlagen lassen, um das Gericht schön abzurunden. Bisher hat es mich nicht enttäuscht und meine Salate noch besser gemacht.
Marc
Produktseite
Diese Woche war zeitlich etwas hektisch, mit den Osterferien.
Trotzdem habe ich es geschafft, bei Nutzern nachzufassen, die zögerten, FI Planner beizutreten, weil auf unserer Website derzeit zu wenig Infos stehen. Ich habe angefangen, unsere «Features»-Seite mit Screenshots und Stichpunkten aufzubauen, damit Leute auf der Warteliste klarer sehen, was Sache ist.
Insgesamt waren das sehr wertvolle Gespräche, um unser Onboarding, Marketing und die User Experience noch weiter zu verbessern. Für alle, die es interessiert: Ich nutze dafür das JTBD-Framework (Jobs-To-Be-Done).
Was mich beschäftigt
Zwei Dinge sind mir im Moment unangenehm:
- Ich muss unsere Website mit einem Demovideo (oder zumindest Screenshots) aktualisieren. Ich weiss zwar auswendig, was hinter den Kulissen steckt, weil ich seit Monaten bzw. Jahren daran arbeite. Aber ich bin überhaupt nicht der typische Nutzer.
- Ich muss unser neues Dokumentationssystem zur richtigen Zeit am richtigen Ort in der Web-App umsetzen. Das Schöne: Den wichtigsten Inhalt habe ich schon zusammengetragen. Jetzt muss ich es nur noch umsetzen oder nun ja… unseren Claude-Frontender fragen ;)
Beide Verbesserungen sollen uns helfen, weniger direkten Support zu leisten und mehr Zeit fürs Iterieren am Produkt selbst zu haben.
Und trotzdem: Wie wir sagen, sind wir eine «Calm company». Und ich weiss, dass April/Mai eine Zeit ist, in der die Wochen wegen Feiertagen kürzer sind. Darum will ich sie auch geniessen ;)
Notiz an einen Freund
Wenn meine imaginäre Freundin in derselben Phase wäre wie wir jetzt, würde ich ihr sagen: Priorisiere dein Backlog gnadenlos.
Du wirst dich immer unter Zeitdruck fühlen, also behalte den Fokus messerscharf auf dem Wichtigsten.
Wie habe ich KI diese Woche genutzt?
Bei der (Frontend-)Entwicklung nutze ich GenAI derzeit so:
- Codex 5.3 / GPT-5.4: Ich plane, was ich machen will, und bekomme als Output eine Requirements-Liste
- Claude Opus 4.6: Ich gebe Claude die Requirements-Liste, damit er den neuen Code schreibt
Bisher hat das sehr gut funktioniert, auch für unser bislang grösstes Redesign.
Ausnahme war letzte Woche unser neues Modul «Inline Documentation»: Da hat Codex unser Design System durcheinandergebracht (sprich: es hat mehr gebaut als nur Design-Elemente), was die Requirements ruiniert hat, was Claudes Output ruiniert hat… Ich weiss, was ich fixen muss, und versuche, das bis nächste Woche erledigt zu haben. Bleib dran!
