Wer über das Thema Schätzen reden will, muss zunächst eine klare Vorstellung davon haben, was denn da eigentlich geschätzt werden soll. Das ist interessanterweise aber nicht der Fall.
Viel wird über Anforderungen gesprochen. Aber wenig über die Arbeit, die die Anforderungen in lauffähigen Code transformieren soll. Das scheint nicht nötig, weil es doch sonnenklar ist: das ist Codierung. Und in der Codierung haben die Entwickler doch viel Erfahrung. Das ist ihr Job. Also sollten sie auch schätzen (oder eher berechnen) können, wie lange die Umsetzung der nächsten Anforderungen dauert.
Nichts könnte jedoch weiter von der Realität entfernt sein. Es ist zwar richtig, dass Softwareentwickler “Männer, die auf Code starren” sind - doch deshalb ist Softwareentwicklung nicht gleichzusetzen mit Codierung, d.h. mit dem Schreiben von Code.
Manager, Kunden, Laien, selbst Softwareentwickler haben ein zu simples Verständnis für das, was Softwareentwicklung ist. Kein Wunder, dass sich aus dem dann eine Forderung ableitet, die nicht zu erfüllen ist, nämlich die der Vorhersage von Aufwänden für die Umsetzung von Anforderungen.
Und leider tut die Softwareentwicklung nicht viel dafür, ihr Bild zu korrigieren. Wer sich “Software Craftsman” nennt, darf sich nicht wundern, wenn man von ihm wie von jedem anderen Handwerker ein genaues Angebot haben will. Da nützt die ganze Beschwörung von Qualität und Berufsehre nichts. Selbstverständlich sollen Handwerker Qualität liefern - aber bitteschön zum vorher festgelegten Termin und fixen Kosten.
Wenn das der Software-Handwerker nicht schafft… dann ist die Enttäuschung verständlicherweise groß. Dabei kann es nicht anders gehen. Der Software-Handwerker muss in dieser Hinsicht enttäuschen. Das liegt in der Natur seiner Arbeit. Er ist nämlich kein Handwerker. Das muss er nur selbst verstehen.
Weisen der Arbeit
Alle Arbeit ist nicht gleich. Nicht nur die Bandbreite ihrer Inhalte ist riesig. Sie unterscheidet sich auch noch fundamentaler in der Weise, wie sie verrichtet wird. Damit meine ich nicht schnell oder sorgfältig, sondern noch grundlegender eine Haltung, einen Anspruch, einen Zweck.
Die uns vertrauteste Arbeitsweise ist die, bei der ein Auftrag zügig und geradlinig umgesetzt wird. Da gibt es kein Zögern, da ist alles klar, da wird zugepackt und das Ergebnis nach allen Regeln der Kunst hergestellt. So stellt ein Bäcker Brötchen her, so repariert ein Schuster Schuhe, ja, selbst ein Musiker spielt so ein Repertoirestück.
Diese Arbeitsweise nenne ich handwerklich. Als Handwerker sind Vorgabe und Ziel klar. Ebenso klar ist es für den Handwerker, mit welchen Methoden, Materialien und Werkzeugen er sie umsetzt.
Handwerker sind dabei für mich jedoch nicht nur Berufstätige mit einem Gesellen- oder Meisterbrief. Nein, jeder Mensch ist Handwerker. Immer wieder über den Tag verteilt. Wenn Sie morgens ein Brot schmieren, dann sind sie Handwerker. Wenn Sie Wäsche waschen, sind Sie Handwerker. Selbst wenn Sie Ihrem Kind etwas vorlesen, sind Sie Handwerker.
Handwerker haben ein Handwerk gelernt. Sie haben im Umgang mit Methoden, Materialien und Werkzeugen in unterschiedlichsten Situationen Erfahrungen gesammelt. So ist die nächste Situation für sie kaum eine Überraschung. Sie wissen, was zu tun ist.
Die Aufgabe des Handwerkers ist es, Vorgaben/Pläne/Entwürfe in nutzbare Ergebnisse zu überführen. Handwerker stellen her. Das sogar immer wieder. Sie sind grundlegend reproduzierend tätig. Sogar so sehr, dass sich ihre Arbeit erst taylorisieren und dann automatisieren lässt. Industrielle Fertigung ist Handwerk on steroids.
Aber natürlich sind wir nicht den ganzen Tag Handwerker. Das können wir nämlich nur sein, wenn erstens die Vorgaben klar sind und wir zweitens für die Umsetzung viel Erfahrung haben. Insbesondere die Vorgaben fehlen jedoch oft. Es gibt keinen Plan.
Planen ist jedoch eine andere Arbeitsweise als handwerkern. Sie ist fundamental kreativ. Denn planen, entwerfen, designen erschafft ein Bild von etwas Neuem. Einen Tisch nach Plan zu bauen, ist etwas anderes, als den Plan für einen Tisch zu entwerfen. Vorher war da keine Vorstellung von einem Tisch, jetzt ist sie da - zunächst nur auf Papier, aber immerhin.
Es ist die Aufgabe von Ingenieuren, zu planen, zu entwerfen, zu konstruieren. Handwerker bauen, Ingenieure “erfinden” (vlg. dazu auch “Discussion of the Method” von B. V. Koen).
Und wieder meine ich damit nicht Berufsgruppen, sondern eben Arbeitsweisen, in denen jeder Mensch Tag für Tag tätig ist. Wenn Sie Ihren Tag planen, sind Sie Ingenieur. Wenn Sie sich überlegen, wie der Weihnachtsbaum in diesem Jahr geschmückt werden könnte, sind Sie Ingenieur. Genauso, wenn Sie sich Gedanken darüber machen, wie Sie am besten ein Bewerbungsschreiben strukturieren.
Ingenieure erdenken Neues, Handwerker manifestieren Neues. So kurz kann man es fassen.
Beide Arbeitsweisen brauchen jedoch ein Fundament. Das besteht aus Kenntnissen, Wissen, Erfahrung. Das zu erarbeiten, braucht wiederum eine andere Arbeitsweise: das Forschen.
Es ist die Aufgabe von Forschern, Wissen zu produzieren. Damit bringen sie jedoch nichts Neues in die Welt, sondern beschreiben vielmehr “nur”, wie die Welt ist.
Um Forscher zu sein, muss man freilich nicht studieren. Jeder Mensch ist Forscher. Wenn Sie die Bedienungsanleitung des neuen Fernsehers studieren, forschen Sie. Wenn Sie Tagebuch schreiben, erforschen Sie sich selbst. Wenn Sie Schlittschuhlaufen lernen, forschen Sie ebenfalls.
Lernen ist Forschung. Analyse ist Forschung. Sie können es nicht vermeiden, jeden Tag aufs neue die Welt zu erforschen. Ganz grundsätzlich ist dafür kein spezielles Werkzeug und schon gar kein Doktorgrad nötig. Blindes trial and error reicht aus - aber mit etwas mehr Systematik mag es schneller gehen.
Forscher liefern die Grundlagen, Ingenieure entwerfen darauf aufbauend Neues und Handwerker stellen es her.
Arbeitsweisenverhältnisse
Vielleicht gibt es noch weitere fundamentale Arbeitsweisen. Aber auch langes Nachdenken hat sie mir nicht entdeckt. Einstweilen fühle ich allerdings auch kein Defizit. Die drei Arbeitsweisen Handwerker (H), Ingenieur (I) und Forscher (F) machen es mir leicht, Berufe und Tätigkeiten ganz unterschiedlicher Art zu erklären. Es kommt nämlich auf das Mischungsverhältnis an.
Jede Arbeit setzt sich aus H, I, F zusammen, wie Farben sich aus unterschiedlichen Anteilen von Rot (R), Grün (G) und Blau (B) ergeben.
Zunächst die zu den Arbeitsweisen gehörenden Berufsgruppen:
- Handwerksberufe: Als Handwerksberufe - Klempner, Tischler, Bäcker usw. - bezeichnen wir solche, bei denen die Arbeit einen überwiegenden Anteil von H hat. I und F kommen auch vor, aber definieren die Arbeit nicht; der HIF-Code ist für mich (80%/10%/10%). Beispiel 1: Natürlich muss ein Bäcker, wenn er eine Hochzeitstorte backen soll, zuerst die Wünsche des Hochzeitspaares erfahren (F). Dann muss er die eine oder andere Idee zu deren Erfüllung entwickeln (I). Letztlich jedoch wird der größte Teil der Arbeit in die Herstellung fließen (H). Beispiel 2: Der KfZ-Mechaniker muss bei einer Inspektion den Zustand eines Wagens prüfen (F). Eine Reparatur oder Wartungsarbeit (H) macht dann jedoch das aus, was wir mit diesem Beruf vor allem verbinden.
- Ingenieursberufe: Wie die Bezeichnung sagt, liegt in Ingenieursberufen - Elektrotechniker, Maschinenbauer usw. - der Schwerpunkt auf I. Natürlich müssen Ingenieure auch forschen, z.B. wenn sie verstehen wollen, was eigentlich ihr Auftrag ist. Und Ingenieure legen auch Hand an, wenn sie z.B. Prototypen bauen (H). Letztlich geht es jedoch um den Entwurf des Neuen, die “Erfindung”. Es soll etwas erdacht werden, das es vorher noch nicht gab (I). HIF-Code (10/80/10).
- Wissenschaftler: Wissenschaftler schaffen Wissen (F). Das ist ihr Auftrag. Dafür müssen sie natürlich auch einen Versuchsaufbau entwerfen (I) oder sogar Daten nach den Regeln der mathematischen Kunst auswerten (H). Doch unterm Strich ist das, was sie tun, ihr Zweck, die Ermittlung dessen, was schon ist. Das fassen sie in Worte - so dass andere Wissenschaftler, aber auch Ingenieure und Handwerker darauf aufbauen können. HIF-Code (10/10/80).
Das war einfach und naheliegend, oder? Die Berufsgruppen, von deren Namen die Arbeitsweisen abgeleitet sind (oder umgekehrt?), konzentrieren sich jeweils zu vielleicht 80% auf die sie bezeichnende Arbeitsweise. Wie ein RGB-Code eine Farbe, so bezeichnet die Mischung der HIF-Werte einen Beruf.
Das lässt sich weiterspinnen. Hier die Mischungsverhältnisse für weitere “Berufsgruppen”, wie ich sie sehe:
- Kunsthandwerker: Wenn der Handwerker-Code HIF(80/10/10) lautet, dann hat der Kunsthandwerker HIF(50/30/20). Er setzt nicht einfach nur einen Entwurf handwerklich um, sondern fertigt diesen Entwurf auch an (I). Außerdem muss er “die Welt” beobachten, um herauszufinden, was ihr gefallen könnte (F).
- Künstler: Auch wenn es heißt “Kunst kommt von Können”, so ist der Künstler nicht vordringlich ein Handwerker. Ich sehe seinen HIF-Code eher bei (30/30/40). Der Künstler will die Welt darstellen, das Wahre herausarbeiten. Dazu muss er sie intensiv studieren (F) und dann eine geeignete Abbildung entwerfen (I). Die handwerkliche Umsetzung ist dann nur noch der kleinere Teil - den große Künstler immer wieder ihren Assistenten überlassen haben.
- Virtuose: Den Virtuosen sehen wir als Künstler. Für mich ist er jedoch eher ein Handwerker. Er muss zwar das Material, das er darbietet, gründlich erforschen und dann seine Interpretation erarbeiten. Doch das, worauf es ankommt, ist am Ende die Reproduktion. Also sehe ich hier einen HIF-Code von (50/20/30).
- Chirurg: Chirurgen sind weitestgehend Handwerker. Dass sie lange studiert haben und die Sache komplizierter ist als eine Autoreparatur, ändert daran nichts. Ich sehe das HIF-Verhältnis so: (70/20/10). Ein wenig Forschung ist noch nötig, um zu erkennen, was wirklich das Problem des Patienten ist (F) - manchmal auch noch während der OP. Dann wird die beste Herangehensweise entworfen (I). Die Operation schließlich besteht im Ausführen von lange geübten Handgriffen entlang anerkannter Pfade. Kaiserschnitt, Herzklappentransplantation, Billroth-II-Resektion, Staroperation, Hernienoperation… das alles tut man überall auf der Welt gleich. Und manches wird schon quasi am Fließband erledigt.
- Hausmeister: Der Hausmeister ist im Wesentlichen ein Handwerker. Er tut, was er kann, selbst. Aber er ist andererseits auch für Gebäude verantwortlich. Daher muss er zuvor analysieren/beobachten (F) und dann das richtige Vorgehen planen (I) - bei dem ihm Handwerker helfen. Ich sehe den HIF-Code bei vielleicht (60/20/20).
- Sportler: Man könnte meinen, ein Sportler sei ein Handwerker. Im Wettkampf ist er das auch. Aber die meiste Zeit performt er nicht, sondern trainiert. Und dazu gehört viel Forschung und Entwurf. Strategien wollen erarbeitet werden (I), die eigenen Leistungsparameter müssen erkundet werden (F). Sportler lernen ständig. Für mich ist der HIF-Code bei (50/20/30) - und das passt schön zum Virtuosen. Der Sportler als Virtuose des Körpers.
- Schüler: Schüler sind zuallererst Forscher. Ihre Aufgabe ist es, Wissen aufzubauen. Lernen bedeutet, das zu beherrschen, was schon in der Welt ist. Also ein HIF-Code von (10/10/80).
- Lehrer: Lehrer hingegen sind eher Ingenieure. Ihre Aufgabe ist es, Pläne dafür zu entwickeln, wie Schüler am besten lernen. Das entspricht eher HIF(30/50/20).
Natürlich sind die HIF-Anteile ständig im Fluss. Mir geht es auch nicht um exakte HIF-Verhältnisse. Die Idee der Mischungsverhältnisse ist das Entscheidende. Dass eben Arbeit überhaupt durch unterschiedliche Anteile an H, I und F charakterisiert ist. Nicht nur die professionelle Arbeit, sondern auch das, was wir täglich tun. Jeder Tag zuhause ist eine neue Mischung aus H, I und F.
Zum Abschluss nun das Mischungsverhältnis, das Sie wahrscheinlich am meisten interessiert. Wie sind H, I und F bei der Softwareentwicklung verteilt? Ich sehe das so:
- Softwareentwickler: Softwareentwickler sind anders als andere. Als hätten wir das nicht immer gewusst ;-) Ich sehe einen HIF-Code von (20/40/40). Handwerker im Sinne der obigen Definition sind Softwareentwickler nur zu einem kleinen Teil. Der Schwerpunkt ihrer Arbeit liegt auf Forschung und Ingenieursarbeit. “Software Engineering” ist also treffender als “Software Craftsmanship” - und liegt trotzdem daneben. Denn anders als bei der Berufsgruppe Ingenieur besteht Softwareentwicklung nicht zu 80% aus Ingenieursarbeiten, sondern teilt sich die 80% mit der Forschung. Das eben macht den Charakter der Softwareentwicklung aus. Es ist viel zu forschen: Kundenwünsche müssen analysiert werden, Technologien müssen evaluiert und erlernt werden, dito Paradigmen und Methoden. Vor allem ist jedoch Quellcode ständig zu studieren, bevor daran Änderungen angebracht werden können. Nach der Forschung kommt der Entwurf. Der findet immer statt, auch wenn Sie nie am Flipchart stehen und UML-Diagramme malen. Softwareentwickler machen sich zunächst immer irgendwelche Gedanken darüber, wie der Code aussehen sollte, bevor sie ihn schreiben. Im Großen wie im Kleinen. Da werden APIs entworfen oder Testreihenfolgen bestimmt. Daten(bank)strukturen werden entworfen. Algorithmen und Lösungsansätze ebenso. Und erst ganz zum Schluss gießt die Softwareentwicklung diese Entwürfe in Code. Da ist dann Handwerk gefragt.
Das HIF-Mischverhältnis der Softwareentwickler ist dem der Künstler am nächsten. Künstler arbeiten sehr iterativ. Künstler machen Prototypen. Künstler können sehr detailverliebt sein. Künstler schauen genau hin. Der eine oder andere mag also ausrufen “Siehste! Das habe ich doch gewusst!”
Dennoch sind Softwareentwickler keine Künstler. Ihre Aufgabe ist schlicht eine andere: Der Künstler soll Wahrheit ausdrücken, die Softwareentwicklung nützliche Werkzeuge herstellen. Das Produkt des Künstlers ist irgendwann fertig und wird nicht weiter verändert. Software hingegen kommt nie zur Ruhe. Von der Analogie “Softwareentwickler sind wie Künstler” halte ich unterm Strich also nichts.
(Un)Schätzbarkeit
So viel der Vorbereitung. Softwareentwicklung (wie auch alle anderen Arbeiten) ist eine Kombination aus drei grundsätzlichen Arbeitsweisen.
Diese drei Arbeitsweisen sind nicht nur in ihren Ergebnissen sehr unterschiedlich, sie lassen sich auch unterschiedlich gut schätzen.
Die handwerkliche Arbeitsweise lässt sich gut abschätzen. Sie ist wenig kreativ. Handwerk arbeitet reproduktiv. Das ist im Grunde sogar seine Definition. Deshalb gibt es auch so viel mehr berufliche Handwerker als Ingenieure und Wissenschaftler. Nicht umsonst ist der Anspruch an jeden Handwerker, einen treffenden Kostenvoranschlag machen zu können, wenn es um die Reparatur einer Heizung geht oder den Bau eines Wintergartens.
Anders ist es für die Arbeitsweise Ingenieur. Die ist hochkreativ. Hier wird “erfunden”. Hier findet Problemlösung statt. Und niemand weiß, wie lange das dauert. Ingenieure entwickeln schließlich Neues. Das braucht Versuch und Irrtum. Dafür gibt es keine berechenbare Geschwindigkeit. Ingenieursarbeit lässt sich mithin nicht schätzen. Oder wenn, dann nur in sehr grobem Rahmen auf der Ebene von Größenordnungen.
Dasselbe gilt für die Arbeitsweise Forschung. Wie lange die Analyse eines steinzeitlichen Grabes dauert, wie viel Aufwand die Erforschung der Kernfusion brauchen wird, wann man die Kundenanforderungen wirklich verstanden hat… das alles lässt sich nicht vorher abschätzen. Oder eben nur wieder auf der Ebene von Größenordnungen.
Das bedeutet für die Softwareentwicklung:
Mit einem HIF-Code von (20/40/40), also 80% Ingenieurs- und Forschungstätigkeit, ist Softwareentwicklung nicht sinnvoll schätzbar.
Manager, Kunden, Laien und auch viele Softwareentwickler glauben, Softwareentwicklung sei vor allem Handwerksarbeit. Deshalb wird immer wieder ein “Kostenvoranschlag” gefordert. Für einen gegebenen Scope (Anforderungen an Funktionalität und Effizienz) soll berechnet werden, wie viel Zeit und damit Geld zur Umsetzung gebraucht werden.
Für eine handwerkliche Leistung eine ganz selbstverständliche Frage. Nur leider ist Softwareentwicklung wenig handwerklich. Deshalb sind die Antworten unbefriedigend und immer wieder sehr weit von der Umsetzungsrealität entfernt. Das Resultat: Streit, Druck und mangelnde Qualität.
Aufgrund einer falschen Prämisse entsteht eben kein korrektes Ergebnis.
Kunden können nicht einschätzen, wie viel Analyse und Entwurf für die Umsetzung von Anforderungen nötig sind. Dass es sich um eine handwerkliche Tätigkeit handle, ist eine Annahme aus Unverständnis bis Ignoranz. Softwareentwickler können die Anteile auch nur sehr schwer abschätzen - und unterschätzen sie regelmäßig. Softwareentwickler sind übertrieben selbstbewusst oder naiv, was ihre Erfahrung in puncto Tools, Technologien, Paradigmen, Methoden oder schlicht das Verständnis des teameigenen Quellcodes angeht. Vom Verständnis der Anforderungen ganz zu schweigen.
Hinzu kommt die Arbeitsatmosphäre in vielen Projekten. Sie ist geprägt von Unterbrechungen aller Art. Selbst bei halbwegs realistischer Einschätzung des Aufwandes kann kaum gesagt werden, wie lange es dauert, bis er erbracht ist. Dringendes aller Art schiebt sich ständig zwischen die konzentrierte Arbeit an einer abgeschätzten Aufgabe.
Das bedeutet unterm Strich:
Abschätzungen von Softwareentwicklungsaufwänden funktionieren nicht - solange der handwerkliche Arbeitsanteil nicht klar erkennbar deutlich überwiegt und für die Dauer der Umsetzung Störungsfreiheit zugesichert werden kann.
Wie oft ist das aber der Fall? Ich halte das für eine Ausnahme. Es ist nicht unmöglich, doch so selten, dass darauf kein ethisches Geschäftsmodell aufgebaut werden kann.
Handlungsempfehlung
Für Ihre Entwicklungspraxis ergeben sich Konsequenzen aus dieser Analyse. Wenn Sie ehrlicher und ruhiger und mit höherer Qualität arbeiten wollen, dann sollten Sie bei der nächsten Aufforderung zur Abgabe einer Schätzung folgende Schritte durchlaufen:
- Machen Sie sich und dem Auftraggeber klar, dass keine Schätzung gefordert wird, sondern ein “Kostenvoranschlag”, d.h. eine Berechnung mit der Genauigkeit von 5–10% in Bezug auf Kosten und Termintreue. Man glaubt ja, Sie seien Handwerker.
- Werden Sie zum Forscher: Analysieren Sie die Anforderungen im Hinblick auf die für die Umsetzung wahrscheinlichen Aufwände an Forschung und Entwurf. Seien Sie schonungslos ehrlich zu sich und dem Auftraggeber. Vertuschen Sie keine Unsicherheiten. Legen Sie das bekannte Unbekannte (also zu Erforschende) auf den Tisch. Bemühen Sie sich außerdem, weiße Flecken, also das unbekannte Unbekannte zu identifizieren.
- Weisen Sie die Schätzung zurück, solange der Handwerksanteil bei der Umsetzung geringer als 80% ist.
Seien Sie transparent, was diese Schritte angeht. Erklären Sie dem Auftraggeber Ihre Haltung. Die ist differenziert und offen und realistisch - auch wenn sie ihm nicht gefällt. Geben Sie ihm womöglich diesen Artikel zu lesen. Er darf mich auch gern kontaktieren für Nachfragen :-)
Ich behaupte nicht, dass diese Haltung einzunehmen leicht für Sie ist. Aber ich bin fest davon überzeugt, dass sie in Übereinstimmung mit der Natur von Softwareentwicklung und insofern ehrlich und ethisch ist.
PS: Softwareentwicklung als Ganzes halte ich übrigens für eine Forschungstätigkeit. Der Zweck der ganzen Entwicklungsarbeit ist die Erforschung dessen, was den Kunden befriedigt. Das weiß der Kunden nämlich selbst nur sehr ungenau. Mit jedem Release lernt er sich besser kennen. Durch Versuch und Irrtum nähert er sich dem an, was wirklich hilft. Das ist Forschung. Um diesen Zweck zu erfüllen, arbeitet der Entwickler mit HIF(20/40/40).