Wenn ich in Kundenterminen meine Visitenkarte verteile, beobachte ich manchmal ein verwirrtes Stirnrunzeln bei meinem Gegenüber:
Agile Software Craftsman – Was ist das denn, bitte schön?
Misstrauisch vermutet man wieder einen dieser neuen Hypetitel wie “Twitter Visionary” oder “Big Data Advocate”, wie sie im Zuge der Digitalisierungswelle in Mode gekommen sind. Doch weit gefehlt!
Die Idee, Softwareentwicklung als Handwerk zu verstehen, existiert bereits seit Ende des letzten Jahrhunderts; so findet man sie beispielsweise in dem Buch The Pragmatic Programmer. From Journeyman to Master von Dave Thomas und Andrew Hunt. Was aber steckt hinter diesem Begriff?
Robert C. Martin bringt die Motivation hinter der Software-Craftsmanship-Bewegung in seiner gewohnt provokanten Art wie folgt auf den Punkt: “We are tired of writing crap.”
Das bedeutet, Schluss mit Copy-und-Paste-Code, unwartbaren, zigtausend Zeilen langen Gottklassen und untestbarer Software. Kein “Das räumen wir später auf!” oder “Wir haben keine Zeit für Unit Tests!” mehr.
Stattdessen verhält sich ein Software Craftsman so, wie man es von einem guten Handwerker erwarten kann. Er erfüllt nicht nur die Wünsche des Kunden, sondern sorgt auch für eine langfristig tragfähige Lösung. Kurz: Es geht um Qualitätsarbeit statt Pfusch am Bau.
Für mich persönlich sind es drei Dinge, die hierfür erforderlich sind und einen guten Software Craftsman ausmachen.
Wenn wir in unserer Arbeit für den Kunden die beste Leistung bringen wollen, müssen wir die dafür notwendigen Handgriffe kennen und sie so lange geübt haben, bis sie uns in Fleisch und Blut übergegangen sind. Es ist ähnlich wie bei einem Musiker: Auch er übt regelmäßig Tonleitern, um beim Auftritt das bestmögliche Ergebnis zu erreichen.
Bei itemis gibt es daher die 4+1-Zeit, in der wir regelmäßig miteinander trainieren – z. B. in Coding Dojos.
Um gute Software entwickeln zu können, genügt es nicht, eine Programmiersprache oder gewisse Technologien perfekt zu beherrschen. Es müssen viele andere Aspekte berücksichtigt werden: Requirements Engineering, Qualitätssicherung, Softwarebetrieb, um nur die Wesentlichsten zu nennen.
Ein Software Craftsman verfügt über Kenntnisse auf all diesen Gebieten und ist so in der Lage, ein Softwareprodukt zu entwickeln und nicht nur Code zu produzieren.
Ein Software Craftsman orientiert sich bei seinem Handeln und seinen Entscheidungen an einem Berufsethos, der sich mit der Handwerkerehre vergleichen lässt. Für mich stehen dabei vor allem die folgenden Werte im Mittelpunkt:
Ich stehe zu den Prinzipien guter Softwareentwicklung wie Clean Code und TDD und lasse mich auch unter Druck nicht zum Pfusch verleiten.
Ich mache keine Zusagen wider besseren Wissens. Wenn ich weiß, dass Deadlines nicht realistisch oder haltbar sind, mache ich das ebenso frühestmöglich transparent, wie ich rechtzeitig auf Risiken hinweise.
Bei meiner Arbeit baue ich keine versteckten technischen Schulden auf. Eine langfristige, nachhaltige Produktentwicklung ist wichtiger als das kurzfristige Halten eines Meilensteins. Frei nach dem Motto von Martin Golding:
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
Dem Software Craftsman geht es in allererster Linie um die Einstellung zum Beruf und dem kontinuierlichen Verbessern seines Handwerks. Es ist also ein Prozess, der uns das gesamte Berufsleben über begleitet, oder in den Worten von Sandro Mancuso in "The Software Craftsman: Professionalism, Pragmatism, Pride" ausgedrückt:
Software craftsmanship is a long journey to mastery. It’s a mindset where software developers choose to be responsible for their own careers, constantly learning new tools and techniques and constantly bettering themselves.