Aus gegebenem Anlass (die SoCraTes 2011 ist gerade in vollem Gange) möchte ich gerne mit dem Thema „Software Craftsmanship“ beschäftigen: Was ist das? Was steht dahinter? Warum ist dieses Thema wichtig?
Dazu möchte ich ein klein wenig ausholen und einen Ausflug ins „echte“ Handwerk machen:
Im Mittelalter war die Produktion von Gütern noch in Manufakturen organisiert. Meistens mit sehr wenigen Mitarbeitern. Geleitet wurde die Manufaktur üblicherweise von einem Meister, der in langjähriger Ausbildung alles über sein Handwerk gelernt hat. Die Qualität der von der Manufaktur gefertigten Waren hing damit auch direkt mit den Qualitäten und Fähigkeiten des Meisters zusammen.
Dann kam die Industrialisierung. Die komplexen Produktionsprozesse der Manufakturen wurden nun in ganz viele Einzelschritte aufgeteilt. Am besten so klein, daß sie auch von Menschen ohne grosse Ausbildung durchgeführt werden können. Meistens waren es tatsächlich nur wenige Handgriffe, die man in relativ kurzer Zeit lernen konnte.
Am Ende der vielen Einzelschritte stand dann wieder das fertig produzierte Produkt. Gegenüber den Manufakturen gab es gleich eine Reihe von Vorteilen:
- Die Qualität der Produkte war immer relativ gleich
- Die Fabrikbesitzer konnten viel Geld sparen, da ungelernte Arbeiter natürlich weniger verdienen als Handwerksmeister
Und das Wichtigste: Die Produktivität war ungleich höher. Der Ausstoss einer nach diesem neuen Muster organisierten Fabrik war ungleich höher als der einer traditionellen Manufaktur. Dazu mit gleichbleibender Qualität und zu wesentlich niedrigeren Stückkosten.
Man muss keinen Abschluss in BWL haben um zu erkennen, warum dieses Vorgehen die Industrie revolutioniert hat.
Lange Zeit war alles in Ordnung. Dann kam die Softwareentwicklung. Und 100 Jahre Industrialisierung hatten natürlich ihre Spuren hinterlassen: Getreu dem oben beschriebenen Muster wurde nun auch hier probiert, den komplexen Prozess der Softwareentwicklung in viele kleine Einzelschritte aufzuteilen.
Dies kann man z.B. schön im Wasserfallmodell sehen: Erst werden die Anforderungen gestellt, danach Grob- und Feinspezifikation erstellt, und im Anschluss die Software implementiert, getestet und abgenommen. Sehr viele einzelne kleine Schritte, deren Ziel es ist, Softwareentwicklung zu einem wiederholbaren Prozess zu machen – ähnlich wie z.B. die Produktion von Möbeln oder Autos.
Es gibt nur ein Problem dabei: Es funktioniert nicht!
In den letzten Jahrzehnten hat sich sehr deutlich gezeigt, daß sich dieses Vorgehen für Softwareentwicklung einfach nicht eignet. Nachlesen kann man das z.B. im Chaos Report der Standish Group, wonach nur ca. 16% aller IT-Projekte erfolgreich abgeschlossen werden (siehe hier).
Softwareentwicklung ist anscheinend eben kein trivialer, mess- und wiederholbarer Ingenieursprozess. Doch was ist es dann? Die Antwort ist so einfach wie überraschend: So wie es aussieht, ist es tatsächlich ein Handwerk!
Wir sollten also nicht von „Software Engineering“, sondern von „Software Craftsmanship“ sprechen. Anstelle von „einfachen Arbeitern“, die nur einzelne Schritte des Produktionsprozesses beherrschen (z.B. Anforderungsanalyse, Implementierung, Test), sollten wir stattdessen wieder mehr darauf setzen, Meister auszubilden, die ihr Fach von vorne bis hinten beherrschen und einen entsprechend grossen Werkzeugkasten zur Verfügung haben. Scrum ist z.B. eines dieser Werkzeuge (unter vielen).
Um dieses Ziel herum formiert sich gerade eine entsprechende Community – auch in Deutschland. Es wird spannend bleiben zu beobachten, wie es weitergeht!