Sandi Metz inspiriert

„Hast du schon die Videos gesehen?“

Diese Frage bezog sich auf drei Videos von Sandi Metz: Polly want a message, All the little things, und Nothing is Something. Thema: refactoring, design pattern, dependency injection, im dritten Video insbesondere auch das null-pattern. Ich hatte die Videos noch nicht gesehen, aber nachdem ich sie gesehen hatte, packte mich wieder die Lust aufs objektorientierte Programmieren.

Ein ganzes Wochenende und noch einige weitere Abende saß ich mit meinem Sohn zusammen vor dem Minecraft-Plugin BetonQuest und wir fingen an einen Teil des Codes (die Events) zu refactorn. Wir probierten das Null-Pattern aus, stolperten über die teilweise „schwierigen“ dependencies und erzeugten zwei erste Pull-Requests.

Da Niki einer der Haupt-Contributoren für BetonQuest ist und Java seine Heimat, fiel es mir als embedded Entwickler doch manches Mal schwer, seinen kleinen Zaubereien zu folgen. Nun will ich mich selber ausprobieren und schau gerade nach einen kleinen eigenen Projekt. Mal schauen, was da noch kommt.

Unterbrechungen

Schon wieder klingelte das Telefon. Ich hatte es gerade 3 Minuten lang geschafft, an meiner Entwickler-Aufgabe zu arbeiten. Ein langwieriges und ermüdendes Thema, das mir nicht viel Spaß machte.

Jede Unterbrechung war eine angenehme Ausrede, die Aufgabe vor mir her zu schieben. Aber so würde ich nie fertig werden. Und das Wochenende rückte auch schon näher, wo war die ganze Zeit geblieben?

Schluss damit!

Nachdem ich aufgelegt hatte, spazierte ich zur Teekanne und goss mir das mittlerweile nur noch lauwarme Gebräu ein und kramte in meiner Toolkiste (= Hirn).

Ein klarer Fall für die Pomodoro, dachte ich: 25 Minuten konzentriert und ohne Unterbrechung arbeiten – ein paar Minuten Pause, dann wieder 25 Minuten Arbeit. Diese Technik hat schon manches Mal geholfen.

Gesagt, getan… Wecker gestellt und los gings.

Zehn Minuten später stand meine Tochter in der Tür. Dann nach fünf Minuten kam eine Anfrage von einem Kollegen per Chat rein. So ging es also nicht. Ich entschloss mich zu drastischeren Maßnahmen.

25 Minuten ohne Unterbrechung wollen möglich gemacht werden. Ich checkte kurz alles: Mail, Chats, offene Anrufe, Termine, Notizen. Gab es etwas mit wirklich höherer Priorität? Gerade stand nichts an. Ich sagte zu meinen Kindern: Hier ist mein Wecker. Wenn der in 25 Minuten klingelt, dann habe ich kurz Zeit für alles was ihr von mir wollt.

Tür zu – im Firmenchat und im Kundenchat auf Abwesenheit mit einer Notiz – Notifications aus – Handy auf „nicht stören“

Ich setzte mir die Kopfhörer auf, um mit einem monotonen Hintergrundgeräusch die Außengeräusche gänzlich zu überdecken. (Ich nehme gerne Meeresrauschen, Flötenmusik von Indianern oder schamanische Trommeln). Jetzt war alles vorbereitet.

Mein Ziel war, in 25 Minuten durch 10 Work Items durch zu kommen. Als der Wecker klingelte war ich erstaunt. Ich hatte zwar nur 8 Items geschafft, war aber viel schneller als sonst in die Arbeit eingetaucht.

Tür auf – ein Glas Wasser – ein kurzer Blick, ob einer was von mir braucht – und schon ging es weiter mit dem zweiten 25-Minuten-Minisprint. Ziel diesmal: 15 Items.

Ich hatte schon gesehen, dass die nächsten Items nicht so komplizierte Fälle sein würden wie im ersten Sprint. Und tatsächlich, als der Wecker wieder klingelte, hatte ich sogar 23 Items geschafft.

Ich machte eine etwas längere Pause, schaute kurz bei meiner Tochter vorbei und wechselte ein paar Worte mit meinem Sohn. Und schon ging es weiter. Nach zwei Stunden hatte ich die Aufgabe fertig. Ich hatte mit einem Aufwand von 6 Stunden gerechnet.

Was sind die Kernpunkte:

  • Unterbrechungsfreies Arbeiten schafft Freiraum. Am Ende hat man in weniger Zeit mehr geschafft und kann dann ohne Probleme wieder eine Phase mit Gesprächen, Anfragen, Chats und Emails angehen.
  • Der 25-5 Rhytmus schafft ein konzentriertes Klima mit dem Bewusstsein, dass man zwischendurch Zeit hat, auf das Außen zu reagieren.
  • Die kurzen Pausen sind wirklich ein Genuss und auch Arbeitszeit. Denn darin entspannt das Gehirn kurz und produziert kreative Ideen. Außerdem denkt man daran, regelmäßig zu trinken.
  • Klare Regeln und Grenzen sind nötig, auch für einen selbst.
  • Leider kann man sich nicht immer den Luxus gönnen, alle Kommunikationskanäle abzuschalten. Andere warten auf meine Reaktion oder benötigen Input von mir um weiter zu machen. Aber Hand aufs Herz, was ist effizienter: sofort zu unterbrechen und für andere da zu sein oder den anderen noch den Rest meiner Pomodoro-Zeit geben – vielleicht können sie ihr Problem sogar selber lösen. Wenn ich dann in meiner Pause zu ihnen gehe, ist ihre Unterbrechung eher zielführend, weil sie ja in ihrem Kontext bleiben und meine Hilfe haben möchten.

Die Kosten des Problems

Er war neuen Erkenntnissen zu seinen aktuellen SW-Fehlern auf der Spur. Endlich hatte er eine wichtige Ursache ausgemacht und war bei einer groben Schätzung zu dem Ergebnis gekommen, dass er noch 3 Wochen brauchen würde, alles glatt und sauber zu ziehen. Im besten Fall eine Woche. Die Änderung würde eine Umstrukturierung größerer Programmteile umfassen. Er hatte schon gut eine Woche für die Analyse benötigt und 2 Fixes machen können, die das Problem entschärften.

„Drei Wochen? Wie teuer ist denn das Problem?“, fragte ich ihn.
„Häh?“
„Na ja, das Problem habt ihr ja schon länger. Was passiert aktuell? Was kann im schlimmsten Falle passieren? Wer ist davon wie betroffen?“

Ich wollte ihn motivieren, die Programmierer-Perspektive zu verlassen und sich das Thema von außen anzuschauen.

Wir kamen darauf, dass zur Zeit zur Vermeidung des Problems jeden Tag das System einmal einen Reset machen musste. Wenn jemand einen Fehler in der Konfiguration seiner Export-Task machte, konnte das System Amok laufen. Gelegentlich schlugen ein Export oder ein Import fehl. Das System ist ein Firmen-internes Tool, hat also keinen direkten Impact auf die Kundenanwendungen. Die internen Anwender sind genervt, müssen bei einem Abbruch den Export nochmal starten. Bricht ein Import ab, kann es zu Inkonsistenzen kommen, die man im schlechtesten Fall nicht entdeckt. Das hat dann indirekt Auswirkungen auf die Kundenapplikationen, kann aber durch einen erneuten Import behoben werden.

„Und wie groß ist die Wahrscheinlichkeit, dass ein fehlerhafter Import unentdeckt bleibt?“
„Sehr klein. Eigentlich weiß es jeder, dass man das Ergebnis überprüfen muss.“
„Und der Neustart des Systems?“
„Der ist schon lange automatisiert. Darum braucht sich niemand zu kümmern.“
„Und wie oft treten Fehler auf?“
„Weiß ich nicht.“
„Also kostet es vor allem die Zeit und Nerven der internen Nutzer, die auf das Ergebnis warten, um eine bestimmte Aufgabe weiter zu führen. Um die Kosten des Problems kalkulieren zu können, musst du also herausfinden, wieviel Zeit jede Woche verloren geht, um einen abgebrochenen Task nochmal zu starten.“

Ich erklärte ihm das Prinzip, das ich auf der Architektur-Schulung von Gernot Starke und Peter Hruschka gelernt hatte. (Blog von Gernot und Peter)

Versuche die Kosten, die das Problem verursacht, zu beziffern. Nur wenn die Kosten deutlich höher sind als das Lösen des Problems, lohnt es sich, das Problem zu lösen.

In diesem Fall war das Problem noch nicht komplett gelöst. Mit dem täglichen Neustart, den angewendeten Fixes sollte es nur noch selten auftreten. Eindeutig ein Fall für „Nicht weiter glatt ziehen“.

Es war das erste Mal, dass ich bewusst versucht habe, dieses Prinzip anzuwenden. Interessant war das Gefühl, den Perspektiven-Wechsel zu machen. Dabei konnte man auch schauen, ob es auf anderen Ebenen Lösungen für das Problem gab. Insbesondere fiel es meinem Kollegen diesmal leichter, auch seinen Chef abzuholen und eine differenziertere Entscheidungsgrundlage zu bieten.

Was sind die Kernpunkte:

  • „Lösungsorientiert“ ist ein schönes Schlagwort, das insbesondere von Managern missbraucht wird, um vermeintlich Kosten zu senken. Oft ist eine Lösung zwar eine Lösung, technisch gesehen sogar manchmal eine gute Lösung, aber vielleicht für das falsche Problem. Das Problem muss erst aus allen Ebenen heraus verstanden werden, bevor man entscheiden kann, in welche Richtung man später Anstrengungen unternimmt.
  • Oft steckt der Betrachter des Problems zu tief im technischen Detail. Es ist wichtig, die Perspektive zu wechseln und sich alle Auswirkungen nochmal auf der Ebene der Auswirkungen im Prozess anzuschauen. Oft gibt es Zusammenhänge in den Gesamtprozessen des Unternehmens und vielleicht ist die Ursache des Problems in einem ganz anderen Bereich anzusiedeln und nicht da, wo es sich manifestiert.
  • Für Änderungen auf Architektur-Ebene müssen die Kosten des Problems deutlich kleiner sein als die Kosten zur Behebung des Problems.

Gefangen

09.02.2022

Ich bin in mir selbst gefangen,
sehne mich nach der Berührung
mit einem anderen Geist.

Wenn ich meine Gefühle beschreibe,
wenn ich versuche,
mein Erleben erlebbar zu machen,
klingen meine Worte
hohl und oberflächlich.

Ich stelle mir vor,
wie es sein könnte
im Gefühl und in den Gedanken
zu verschmelzen.

Zwei Seelen die sich treffen,
umeinander tanzen
und sich schließlich ineinander weben.

Wo sie sich berühren
explodieren die Farben,
die Umarmung ist ein Durchdringen
und das getrennte Erleben
wird ein gemeinsames.

Verstehe einer das Konzept!

Verzweifelt saß er vor dem Kotlin Code und versuchte mir das Konzept von Coroutines zu erklären, das er selber noch nicht richtig verstanden hatte.

“Ich weiß nicht, wo diese ganzen Threads entstehen. Das sollte eigentlich nicht passieren. Genau dafür sind Coroutines ja schließlich da …“

„Kennt sich denn niemand bei euch damit aus?”

“Der Autor von dieser Software ist mittlerweile gegangen. Ich werde auf die zwei Java-Experten verwiesen. Aber das sind Java-Experten, keine Kotlin-Experten.”

Ich grübelte an diesem Problem herum. Ein typischer Fall. Man hat wichtige Konzepte – in diesem Fall die einer Programmiersprache – nicht verstanden, um die wirkliche Ursache für die Probleme im System zu verstehen. Geschweige denn lösen zu können. Und der Autor des Systems hatte sie wohl auch nicht verstanden. Wenn man doch jemanden kennen würde, der einem diese Konzepte erklären könnte.

Manchmal hat man so jemanden in seinem Netzwerk, aber den bezahlt die Firma nicht. Dass heißt, Hilfe aus dieser Richtung kann höchstens Impulse setzen. Ich fragte den frustrierten Programmierer: „Such doch mal nach Namen von Leuten, die sich wirklich mit dem Thema auskennen.“

Es war ein kurzer Weg. Auf der Seite des Herstellers von Kotlin wurde der Teamleiter Roman Elizarov erwähnt. Ein Blick in Youtube brachte eine Reihe seiner Vorträge zum Vorschein, die die Konzepte, Goes und No-Goes erklärten. Und drei Stunden später wussten wir, wo in der Architektur der Software grundlegende Fehler waren.

Was habe ich daraus gelernt?

  • Es ist wichtig, die Grundkonzepte der Tools zu verstehen, die wir benutzen.
  • Es lohnt sich, nach Blogs, Artikeln und Videos von den Leuten zu suchen, die die Tool durchdrungen haben, vielleicht sogar entwickelt haben.
  • Und man kann, wenn man dann immer noch nicht weiter kommt, direkten Kontakt aufnehmen.
  • Für eine Firma würde es sich unter Umständen sogar lohnen, ein paar Beratungsstunden zu kaufen, wenn das schnell und unkompliziert möglich ist.

In stillem Gedenken

Für meine Tante Waltraut

Wir lachen und laufen
den Hang hinab
durch feuchtes Gras
in dem der Tau
als Wasserperlen
in der Morgensonne leuchtet.
Übermut.

Unser Ziel ist das Haus
der Töpferin.
Auf jedes Kind
wartet ein Geschenk
von unserer Tante.
Eine Tasse mit unseren Namen.
Freude.

Die Erinnerungen steigen
mit dem Dampf
auf aus meiner Tasse.
In stillem Gedenken
lausche ich
auf die Stimmen der Vergangenheit.
Trauer.

Haikus, Tankas und andere Textfetzen

Ich schreibe gerne kurze „Gedichte“. Eigentlich sind es eher kleine Textfetzen, die einer Stimmung Ausdruck geben oder eine Situation erfassen. Diese Texte sind formlos. Mal länger mal kürzer.

Manchmal lasse ich auch einfach nur meine Gedanken fließen, sammel ein paar Wörter, die mir in den Sinn kommen und mache daraus einen Text:

Steintosen, klappern, Himmelspeitsche, Riesenschnabel, Rollen, Würgegriff, Herzknoten, Die Liebenden, umschlungen, Sehnsuchtsgesang, Achterband, Wortgewalt

Steintosen

Die Steine rollen in den Wellen, als der Wasservogel aus den Traumtiefen auftaucht und die Schwingen ausbreitend seinen Sehnsuchtsgesang erklingen lässt. Wortgewaltig steigt er in die Höhe und sein Schweif durchschneidet die Luft wie eine Himmelspeitsche.
Die Töne aus seinem Riesenschnabel umschlingen die Liebenden und verbinden sie mit dem Achterband in einem Herzknoten. Das Steintosen umhüllt ihr Schweigen.

Bei diesem Gedicht muss ich dazu sagen, dass ich bei dem Wort Steintosen an einen Strand ganz im Süden der dänischen Insel Langeland denke, der aus großen faustdicken Kieseln besteht durch die die wilden Wellen rollen.

Im Augenblick beschäftige ich mich ein bisschen mit Haikus und Tankas und lasse mich durch die eingeschränkte Form inspirieren. Wer mehr über diese japanische Gedichtsform erfahren möchte, dem sei die folgende Webseite ans Herz gelegt: https://haiku.de/
Hier nun einige meiner Haikus und Tankas.

„Der Winterwind rauscht.
Die letzten Blätter fallen.
Der Herst ist vorbei.

In warme Decken gehüllt
trinke ich Tee am Feuer.“

Dieses Tanka hält sich an die Anzahl der Silben (5-7-5 7-7). Es ist in zwei Teile geteilt, wobei der zweite Teil etwas im Gegensatz zum ersten steht. Es enthält den Bezug auf eine Jahreszeit und ich habe versucht, keine Wörter doppelt zu verwenden. Ich mache bei Artikeln eine Ausnahme. Ich mag die Texte lieber, wenn sie richtige Sätze sind.

„Auf schwarzer Straße
gleitet der Lichtstrahl entlang –
spring fort kleines Reh“

Dem ersten Haiku in meinem Leben bin ich in meiner Kindheit begegnet. Es war das kürzeste Gedicht, das ich kannte. Mir ist erst vor ein paar Jahren klar geworden, dass es sich um ein Haiku handelt.

„Um mein Brunnenseil
rankt eine Winde sich,
gibt mir Wasser, Freund.“
(Frau ) Chiyo-ni

Ich mag diese Gedichtsform. Ungeschlagen in der Kürze ist jedoch mein Mini-Gedicht. Auch wenn es streng genommen nicht unter Lyrik eingestuft werden würde, wie mir eine Studentin der Literatur erklärt hat. Und dennoch, es ist mehr dahinter, als man beim ersten Lesen vielleicht denken mag…

„Nur drei Worte.“

Zusammen halten, was zusammen gehört

Jeder kennt es, die Suche nach den richtigen Knöpfen. Habe ich in meiner Knopfkiste genug Knöpfe von genau der einen Sorte? Wie sortiere ich sie, damit ich schnell das finde, was ich suche? Bei vielen Einzelknöpfen ist es nie einfach, die richtige Methode zu finden. Hier mal drei Möglichkeiten, die wir gefunden haben um unsere Knöpfe zu „organisieren“: