24. Januar 2023 von Mahdyar Safarianbarmi
Software Craftsmanship und ihre Prinzipien
Sind die Softwareentwicklerinnen und Softwareentwickler einfach Herstellerinnen und Hersteller oder Ingenieurinnen und Ingenieure? Soll die neue Software nur funktionieren oder Mehrwert bringen? Was ist wichtiger?
Software Craftsmanship und die Qualität der Software
In den letzten Jahren hat die Softwareentwicklung versucht, agile Methoden einzusetzen, um die richtigen Produkte zu liefern. Aber was ist mit der Qualität? Software Craftsmanship - oder auch Software-Handwerkskunst - geht über Softwareengineering hinaus. Diese Bewegung weist darauf hin, dass die Qualität der Software nicht zu vernachlässigen ist.
Früher wurden Entwicklerinnen und Entwickler als die Personen betrachtet, die der Berechenbarkeit, Genauigkeit und Planbarkeit viel Aufmerksamkeit widmeten. Heute wissen wir jedoch, dass die Softwareentwicklung kein linearer, sondern ein sich stetig entwickelnder Prozess ist, durch den eine Individualsoftware zustande kommt. Deshalb wird ein neues und passendes Modell benötigt, in dem Qualität, Nachhaltigkeit, Kreativität und Teamarbeit eine große Rolle spielen.
Dabei rücken die Entwicklerinnen und Entwickler in den Mittelpunkt. Sie sind die Handwerkenden und sollen auf ihre Arbeit stolz sein. Durch den Stolz und das Engagement für die hervorragende Qualität werden die kundenspezifischen Lösungen geprägt, die nachhaltig und hochwertig sind.
Prinzipien der Software Craftsmanship
Software Craftsmanship ist eine Bewegung im Softwareengineering. Sie zielt darauf ab, Softwareentwicklung als Handwerk statt als reinen Ingenieursansatz zu betrachten. Die Software-Craftsmanship-Bewegung beruht auf vier Prinzipien, bei denen der Fokus zur Hälfte auf der Qualität der Software und zur Hälfte auf dem Menschen (Developerinnen und Developer sowie Kundschaft) liegt.
Im Manifesto for Software Craftsmanship heißt es:
Als engagierte Software-Handwerkende heben wir die Messlatte für professionelle Softwareentwicklung an, indem wir üben und anderen dabei helfen, das Handwerk zu erlernen. Durch diese Tätigkeit haben wir diese Werte zu schätzen gelernt:
- Nicht nur funktionierende Software, sondern auch gut gefertigte Software zu produzieren.
- Nicht nur auf Veränderung zu reagieren, sondern stets Mehrwert zu schaffen.
- Nicht nur Individuen und Interaktionen, sondern auch eine Gemeinschaft aus Fachleuten zu sein.
- Nicht nur Zusammenarbeit mit der Kundschaft, sondern auch produktive Partnerschaften zu schaffen.
Das bedeutet, beim Streben nach den Werten auf der linken Seite halten wir die Werte auf der rechten Seite für unverzichtbar. Diese Erklärung darf in jeglicher Form frei kopiert werden, aber nur in seiner Gesamtheit mit diesem Zusatz.
Gut gefertigte Software
Hier spricht man von der Qualität. Ja, die Software muss funktionieren das allein ist allerdings nicht ausreichend. Die Software muss nicht nur das Problem lösen, sondern auch gut gefertigt sein. Das zu messen, ist nicht immer leicht und die Bedeutung von „gut gefertigt“ kann von Projekt zu Projekt variieren.
Es gibt bestimmte Grundlagen – unter anderem vollständige Dokumentation, erweiterbare und flexible Architekturen, Clean Code und Konsistenz. Wie alle Handwerkerinnen und Handwerker profitieren auch Developerinnen und Developer von ihrem Werkzeug. Wenn sie ein Tool nicht kennen, es aber kennenlernen müssen, weil es das beste Tool ist, wird dies getan. So sind auch Entwicklerinnen und Entwickler verantwortlich für das, was sie erstellen, sowie für die Vermeidung von Mängeln.
Um eine gut gefertigte Software abzuliefern, sollte man Best Practices für die Codierung nutzen. Softwaredesignprinzipien und Softwaredesignmuster sind einige Tools, die dafür verwendet werden können. Darüber hinaus gibt es Clean-Code-Prinzipien wie SOLID, DRY, KISS und viele mehr.
Der Mehrwert
Es geht nicht nur darum, Änderungen zu machen und Tickets abzuschließen. Es geht vielmehr darum zu versuchen, den Wunsch der Kundschaft stets zu erfüllen, Probleme zu erkennen und neue Lösungen zu liefern. Neben technischen Lösungen ist der Gesamtnutzen der Software zu betrachten und man sollte keine Angst davor haben, neue Vorschläge zu machen und Erfahrungen mitzubringen.
Man vermeidet Abkürzungen und das Mindset „Ich räume das später auf“, indem ein nachhaltiges Tempo gehalten wird.
Eine Gemeinschaft aus Fachleuten
Beim Software-Craftsmanship-Prinzip geht es um die Kommunikation und um die Gemeinschaft der Developerinnen und Developer. Geht man von der Annahme aus, dass Entwicklerinnen und Entwickler Handwerkende sind, sollte man akzeptieren, dass dies auch für andere beteiligte Personen gilt. Aus diesem Grund müssen auch weitere Personengruppen, die mit der entwickelten Software zu tun haben, mit Respekt behandelt werden. Man erstellt eine Software, die später gewartet werden muss. Diese Wartung betrifft andere Developerinnen und Developer der Gemeinschaft. Man zeigt Respekt, indem man unter anderem den Code wartbar, flexibel und vollständig dokumentiert schreibt.
So hilft man nicht nur anderen Developerinnen und Developern, sondern reduziert auch die Wartungskosten auf Kundenseite. Denn die Wartung von einem chaotischen Code bedeutet, dass mehr Personal für längere Zeiträume erforderlich ist.
Zudem nimmt die Komplexität der Technologien weiter zu. Entwicklerinnen und Entwickler sollen zusammenarbeiten, um gemeinsam erfolgreich zu werden – Stichpunkt Wissens- und Erfahrungsaustausch. Diese Verantwortung beschränkt sich nicht auf ein Team, sondern man ist auch als Teil der Softwareentwicklungs-Community anderen Developerinnen und Developern gegenüber verantwortlich. Beiträge zur Open Source Community, Aktivitäten auf Plattformen wie Stackoverflow oder das Schreiben von Artikeln und Kommentaren können Maßnahmen zur Verbreitung des Wissens und der Erfahrung sein. Der Leitspruch lautet: „Wir unterrichten jeden, der bereit ist zu lernen.“
Neben der Verbreitung der eigenen Erfahrung soll man auch gut zuhören. Meinungsunterschiede werden begrüßt und aus Unterschieden wird gelernt. Man ist offen für Veränderungen und lässt nicht zu, dass bisherige Prozesse eine Optimierung behindern. Um dieses Ziel zu erreichen, sollte man großen Wert auf Transparenz legen.
Produktive Partnerschaften
Es geht nicht um den Code. Es geht um die Kundschaft. Die Probleme von Kundinnen und Kunden sollten gelöst werden. Deshalb wird nicht nur die reine Kommunikation, sondern es werden auch gute Partnerschaften benötigt. In einer Partnerschaft mit Kundinnen und Kunden fragt man sich: „Was kann ich tun, damit wir beide profitieren können?“ Um die Frage beantworten zu können, muss man das Geschäft der Kundin beziehungsweise des Kunden gut kennen. Bei einer Partnerschaft werden die eigenen Ziele so nach den Zielen der Kundschaft ausgerichtet, dass beide Seiten den Erfolg des anderen maximieren wollen.
Außerdem muss man bei einer Partnerschaft professionell und ethisch handeln. Daher kommuniziert man die Fortschritte ehrlich und offen mit der Kundschaft.
Fazit
Software Craftsmanship weist mehrere Aspekte auf: nicht nur die Hingabe an die Herstellung eines guten Produktes, sondern auch Nachhaltigkeit, Achtsamkeit und Wertschätzung für den Prozess. Zwar revolutioniert Software Craftsmanship die Welt der Softwareentwicklung nicht und liefert auch keine sofortigen Ergebnisse, aber diese Prinzipien auf Dauer im Auge zu behalten, nützt allen Beteiligten.
Ihr interessiert euch für das Thema und möchtet gern mehr erfahren? Ich persönlich kann euch folgende Bücher empfehlen:
- Robert C. Martin (Uncle Bob): Clean Code: A Handbook of Agile Software Craftsmanshi. Prentice Hall, 2008
- Pete McBreen: Software Craftsmanship: The New Imperative. Addison Wesley, 2001
- Sandro Mancuso: The Software Craftsman: Professionalism, Pragmatism, Pride. Prentice Hall, 2014