Blog

Craftsmanship in der Softwareentwicklung

Entwickler arbeiten gemeinsam auf Sofa

Man kann unterschiedlicher Meinung sein, was das Wesen von Softwareentwicklung ausmacht: Ist Softwareentwicklung eine Geisteswissenschaft, eine Ingenieurwissenschaft oder lässt sich die Entwicklung individueller Software keiner dieser theoretischen Kategorien zuordnen und ist vielmehr ein Handwerk?

Mechanistische Sicht

Jede der genannten Kategorien enthält unterschiedliche Sichtweisen, Philosophien und Herangehensweisen an unsere Profession. Historisch wurde Softwareentwicklung ingenieurwissenschaftlich betrachtet: berechenbar, planbar, präzise, exakt. Entsprechend wurde der Beruf des Softwareentwicklers, also desjenigen, der die exakten und präzise geplanten Elemente umsetzt, mechanistisch gesehen. Die Crux an dieser Sicht: Wir arbeiten nicht im Fließbandmodus; gerade Individualsoftware entsteht und verändert sich noch während ihrer Entstehung, die durch eine kreative und schöpferisch-intellektuelle Auseinandersetzung mit den zu lösenden Problemen geprägt ist. Per definitionem gibt es nämlich für die neuartigen, kundenspezifischen Lösungen der Individualsoftware keine fertigen, leicht einzusetzenden und auskonfigurierten Bausteine.

Softwareentwicklung ist mehr

Als professionelle Softwareentwickler – und eben nicht als mechanistische Fließbandarbeiter – sollten wir daher weiterführende Aspekte wie Qualität, Kreativität, Eigeninitiative und Teamarbeit ins Auge fassen.

Untersucht man diese Aspekte fernab der Softwareentwicklung, lassen sich Parallelen zu traditionellen Handwerksberufen finden, welche sich in der Software-Craftsmanship-Bewegung manifestiert haben: Der nach den Prinzipien des Software Craftsmanship agierende Softwareentwickler besitzt ihr zufolge einen Wertekodex, der über den Tellerrand der rein technischen Implementierung hinausblickt.

Der Wertekodex

Das Agile Manifest stellt unter anderem die Menschen und ihre Interaktionen in den Vordergrund. Das Software Craftsmanship Manifest führt diese Ideen weiter, betrachtet Softwareentwicklung als Handwerk und definiert darüber vier Werte.

Diese im Folgenden genannten Werte sind prägnant formuliert und liefern verschiedene, z. T. unterschiedliche Interpretationsmöglichkeiten. Ich stelle hier meine ganz persönliche Interpretation und die sich für mich im Alltag daraus ergebende Philosophie vor. Ich freue mich natürlich über Ihr Feedback zum Austausch anderer Sichtweisen und vor allem eine regen Diskussion.

Gut gemachte Software

Der erste Wert bezieht sich auf die der Software zugrundeliegende immanente Qualität, die über deren reine Funktionserfüllung hinausgeht:

Nicht nur gut funktionierende Software, sondern gut gefertigte Software.

Software soll also nicht nur den rein funktionalen Anforderungen genügen, mithin das Problem des Kunden lösen, sondern auch „gut gefertigt“ sein. In diesem Kontext können unterschiedliche, z. T. auch nicht eindeutig messbare Aspekte definiert werden, u. a. ein einheitlicher Programmierstil, eine erweiterbare und flexible Architektur, gepflegte Entwicklerdokumentation oder umfangreiche Tests.

Wenngleich die genannten Aspekte in einem professionell geführten Softwareprojekt existieren, ja eigentlich selbstverständlich sind, haben wir alle in unterschiedlichem Ausmaß Projekte erlebt, in denen diese Aspekte aus budgetären oder zeitlichen Gründen (zumindest temporär) vernachlässigt werden mussten. Für den Softwareentwickler, der den Werten des Software Craftsmanship folgt, sind diese Aspekte aber in der Realität genauso hoch priorisiert wie Budgettreue oder Zeitplan.

Spannend ist die Frage, was ein Befolgen dieses Wertes dem Kunden bringt. Hier gilt zu bedenken, dass Software erfahrungsgemäß länger im Betrieb bleibt als ursprünglich geplant, mithin durch technische Nachhaltigkeit mittel- und langfristig Aufwände minimiert. Gerade bei agil entwickelter Individualsoftware werden noch nach der Implementierung Anforderungen iterativ verfeinert, weiterentwickelt und z. T. auch erst entdeckt. Gut gefertigte Software mit gepflegter Entwicklerdokumentation und einer sauberen Architektur ermöglicht es, neue Anforderungen und Verbesserungen sauber, nachhaltig und kosteneffizient umzusetzen.

Leseempfehlungen zum Thema Softwarequalität: Clean Code, Refactoring und Pragmatismus in der Softwareentwicklung.

Mehrwert schaffen

Die Interpretation des zweiten Wertes

Nicht nur auf Veränderung reagieren, sondern Mehrwert schaffen

lässt, analog zu „gut gefertigter Software“, viel Spielraum im Hinblick auf die Bedeutung des Begriffs „Mehrwert“.

Aktiv Mehrwert zu schaffen, mit der Betonung auf “aktiv“, ist für mich eine der Hauptmotivatoren, im Bereich individueller Softwareentwicklung zu arbeiten: In diesem Wert steckt für mich nicht nur das reine Abarbeiten von Anforderungstickets (auf Veränderung zu reagieren), sondern der Wunsch und die Notwendigkeit, die zugrundeliegende Fachlichkeit zu durchdringen, aktiv Probleme zu erkennen und Impulse für neue Lösungen zu liefern.

Der Mehrwert für den Kunden ist in diesem Fall offensichtlich: Neben der software-technischen Lösung seiner fachlichen Probleme arbeitet der Software Craftsman gemeinsam mit dem Kunden und proaktiv an einer kontinuierlichen Steigerung des Gesamtnutzens der Software, indem er seine spezifischen technischen Kenntnisse und branchen-spezifischen Erfahrungen mit einbringt.

Gemeinschaft aus Experten

Während sich die ersten beiden Werte mit der handwerklichen Qualität sowie der proaktiven Schaffung von Mehrwert befassen, geht es in den nächsten beiden Werten um soziale und kommunikative Aspekte, die ein nachhaltig und langfristig erfolgreiches Softwareprojekt mindestens ebenso beeinflussen. Beim diesem dritten Wert des Manifests geht es also um den größeren sozialen Kontext, in dem wir uns als Softwareentwickler bewegen:

Nicht nur Individuen und Interaktionen, sondern eine Gemeinschaft aus Experten

n Zeiten zunehmender fachlicher und technischer Komplexität können große Softwaresysteme nicht mehr von Einzelkämpfern entwickelt werden. Stattdessen ist man, z. B. durch die Verwendung von Open-Source-Komponenten oder Plattformen wie Stack Overflow, Teil einer Gemeinschaft. Neben dem Erfahrungsaustausch innerhalb des Teams ist also auch der Blick über den Tellerrand, z. B. für die kritische Reflexion der eingesetzten Frameworks, Design Patterns und Architekturen, sehr wichtig. Dieser Austausch kann durch verschiedene Aktivitäten zustande kommen: durch Lesen, Schreiben und Kommentieren von Blogartikeln, die Teilnahme an Konferenzen, User Groups und Hackathons etc.

Produktive Partnerschaften

Während sich der Wert „Gemeinschaft von Experten“ auf den Zusammenhalt und den Austausch der fachlichen Spezialisten bezieht, geht es beim letzten Wert um die Beziehung zum Auftraggeber:

Nicht nur Zusammenarbeit mit dem Kunden, sondern produktive Partnerschaft

Das Ziel einer geschäftlichen Kooperation sollte nicht nur die reine Zusammenarbeit zwecks Vertragserfüllung zum Ziel eines individuellen Softwareprodukts sein. Stattdessen sollten beide Parteien an der Zusammenarbeit wachsen, mithin ein von gegenseitigem Vertrauen geprägtes Wachstum über die reine Softwareentwicklung hinaus anstreben. Dieses Wachstum kann sich z. B. über den im zweiten Wert angesprochenen Mehrwert äußern, der sich aus einer aktiven Beschäftigung mit der Fachlichkeit und einem gegenseitigen, wertschätzenden Arbeiten auf Augenhöhe ergibt.

Herausforderungen

Die Software-Craftsmanship-Bewegung hat wie oben erwähnt ein Manifest definiert; analog zum agilen Manifest sind hier konkrete Handlungsanweisungen, sozusagen der Umgang mit den Werten des Manifests im operativen Tagesgeschäft, ganz bewusst nicht vorgeschrieben. Meiner Meinung nach ist dies auch gar nicht nötig: Stattdessen soll das Manifest das Team und den Kunden motivieren, konstruktiv über die genannten Werte sowie bewusste und unbewusste Annahmen zu diskutieren und so sehr projekt- und personenspezifisch festzulegen, wie diese Werte im Alltag gelebt werden sollen.

Zusammenfassung

Die Software-Craftsmanship-Bewegung stellt die Softwarewelt nicht auf den Kopf und ist bei weitem nicht so disruptiv und revolutionär wie es das agile Manifest vor einigen Jahren war. Stattdessen ist ihr Manifest ein Postulat übergeordneter Werte, die von Projekt zu Projekt durchaus unterschiedliche Ausprägung finden dürfen. In meinen Augen ein sinnvoller Ansatz, die ganzheitliche und nachhaltige Verantwortung für Software-Qualität und die Schaffung von Software-Mehrwert im Denken von Softwareentwicklern als hohes Gut zu verankern.

Weiterführende Links:

  • Software Craftsmanship Manifesto
  • Pete McBreen: Software Craftsmanship: The New Imperative. Addison Wesley, 2001
  • Sandro Mancuso: The Software Craftsman: Professionalism, Pragmatism, Pride. Prentice Hall, 2014
  • Andrew Hunt: The Pragmatic Programmer: From Journeyman to Master, Addison Wesley, 1999
  • Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship , Prentice Hall, 2008