zurück zum Artikel

Wie man Aufwand schÀtzt

Golo Roden

Jede Entwicklerin und jeder Entwickler kennt die Herausforderung, Aufwand fĂŒr die Entwicklung Code zu schĂ€tzen. Die wenigsten machen das gerne. Warum ist SchĂ€tzen so unbeliebt, warum ist es ĂŒberhaupt erforderlich und worauf sollte man achten?

Jede Entwicklerin und jeder Entwickler kennt die Herausforderung, Aufwand fĂŒr die Entwicklung Code zu schĂ€tzen. Die wenigsten machen das gerne. Warum ist SchĂ€tzen so unbeliebt, warum ist es ĂŒberhaupt erforderlich und worauf sollte man achten?

Die Frage, warum ĂŒberhaupt geschĂ€tzt werden muss, lĂ€sst sich leicht beantworten. Zu wissen, wie lange eine Aufgabe voraussichtlich noch dauern wird, ist essenziell fĂŒr die Planung, wer in einem Team wann was ausfĂŒhren kann. Auch ĂŒber Teamgrenzen hinweg ist eine gewisse Zeitplanung essenziell, immerhin mĂŒssen Teams koordiniert und Ressourcen beschafft werden. Außerdem haben auch andere Abteilungen wie Marketing ein Interesse daran, frĂŒhzeitig in die Planung eingebunden zu sein.

Letztlich steckt hinter der Aufgabe zu schĂ€tzen lediglich das BedĂŒrfnis, ungefĂ€hr zu wissen, wann man wie weit ist, um sich entsprechend vorbereiten zu können, damit alle im Fluss arbeiten können und keine unnötigen Wartezeiten entstehen. Das ist ein durchaus legitimer Ansatz, der zudem erforderlich ist, um Hand in Hand zu arbeiten. Dieses Vorgehen stĂ¶ĂŸt in aller Regel auch auf VerstĂ€ndnis und niemand hat etwas dagegen. Warum wird SchĂ€tzen also dennoch hĂ€ufig abgelehnt?

Hier kommt in aller Regel ein zweiter Aspekt ins Spiel, nĂ€mlich die Kontrolle. Wenn man die Frage, wie lange etwas noch dauern wird, beantwortet, dann wissen Entwicklerinnen und Entwickler, dass das meistens mit einer gewissen Verbindlichkeit einhergeht und dass das ĂŒber kurz oder lang dazu fĂŒhrt, dass sie sich rechtfertigen mĂŒssen, warum der Plan nicht eingehalten wird. Dabei war gar nicht von einem Plan die Rede, sondern lediglich von einer SchĂ€tzung!

In der Praxis wird an der Stelle gerne das Buzzword Commitment verwendet, was verschleiern soll, dass es sich um eine von außen erwartete Verbindlichkeit handelt: Commitment klingt dafĂŒr viel zu selbstgewĂ€hlt und selbstbestimmt. Das ist es aber in aller Regel nicht.

Der Punkt dabei ist das fehlende Vertrauen. Außenstehende können die Entwicklung hĂ€ufig nicht beurteilen, sollen sie aber verwalten. Um dafĂŒr eine Grundlage zu haben, werden irgendwelche Zahlen benötigt (mit Betonung auf "irgend"), da diese sich hervorragend zum Planen und Verwalten eignen. Und genau da entsteht das Problem – aus einer ungefĂ€hren und ungenauen SchĂ€tzung wird ein verbindlicher Plan.

Was dabei gerne vergessen wird, ist, dass eine SchĂ€tzung per se unscharf und ungenau sein muss, denn das ist die Definition einer SchĂ€tzung. Wenn man es genau wĂŒsste, mĂŒsste man ja nicht schĂ€tzen. An der Stelle zeigt sich ein gravierendes UnverstĂ€ndnis von Entwicklung, dass diese nĂ€mlich kein wiederholbarer Prozess, sondern ein kreativer Akt ist, weshalb es auch "Entwicklung" und nicht "Produktion" heißt.

BĂŒcher wie "The Art of Programming" von Donald E. Knuth zeigen, dass man Softwareentwicklung durchaus als Kunst ansehen kann und weniger als Ingenieurswissenschaft. NatĂŒrlich hat Softwareentwicklung etwas davon, nĂ€mlich das Erschaffen von Strukturen, aber es gibt eben auch kĂŒnstlerisch-kreative Anteile. Und die werden hĂ€ufig vergessen.

Der Punkt ist nun: SchĂ€tzen zum Koordinieren von Teams ist legitim, und dafĂŒr braucht man auch eine ungefĂ€hre Planung. Die Frage ist dann aber, wie macht man das?

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) ĂŒbermittelt werden. Mehr dazu in unserer DatenschutzerklĂ€rung [1].

Prinzipiell gibt es zwei grundverschiedene AnsĂ€tze, wie geschĂ€tzt werden kann: absolut oder relativ. Absolut zu schĂ€tzen heißt, die tatsĂ€chlich benötigte Zeit vorherzusagen. Relativ zu schĂ€tzen bedeutet hingegen, die einzelnen Aufgaben lediglich in Relation zueinander zu setzen. Dabei muss eine relative SchĂ€tzung nicht zwingend auf Zeit bezogen sein, sondern kann auch auf anderen Faktoren basieren.

Was spricht dafĂŒr, in absoluter Zeit zu schĂ€tzen? ZunĂ€chst einmal, dass die meisten Entwicklerinnen und Entwickler ein ganz passables GespĂŒr fĂŒr Zeit haben, sofern die Aufgabe klar ist. Im Umkehrschluss gilt: Ist eine Aufgabe unklar, wird es extrem schwer, den Aufwand zeitlich zu schĂ€tzen, sodass Unklarheiten sehr schnell auffallen.

Allerdings spricht gegen das SchĂ€tzen in Zeit, dass die SchĂ€tzungen hĂ€ufig drastisch von der anschließend tatsĂ€chlich benötigten Zeit abweichen. Das wirkt zunĂ€chst wie ein Widerspruch, lĂ€sst sich aber leicht erklĂ€ren: Allzu oft werden hier nĂ€mlich "Code Complete" und "Feature Complete" verwechselt, also das Fertigstellen der reinen Codierung und das Fertigstellen des gesamten Features, einschließlich Dokumentation, Tests, Integration und so weiter.

Außerdem zeigt die Erfahrung, dass es ratsam ist, generell einen zeitlichen Puffer fĂŒr Unerwartetes aufzuschlagen, beispielsweise fĂŒr Fehlersuche.

All das hat dazu gefĂŒhrt, dass oftmals relativ geschĂ€tzt wird. Die Idee dabei ist, einen Bezugspunkt zu wĂ€hlen und Aufgaben nur noch in Relation zu diesem zu schĂ€tzen. Ob es sich dabei um Zeit, KomplexitĂ€t oder etwas anderes handelt ist offen. Storypunkte, die beispielsweise gerne in Verbindung mit Scrum genutzt werden, schlagen genau das vor: Hier soll die KomplexitĂ€t von Aufgaben geschĂ€tzt werden. Problematisch daran ist, dass eine hohe KomplexitĂ€t allerdings mit hohem Zeitaufwand assoziiert wird, obwohl das nicht zwingend so sein muss.

In der Praxis erlebt man dann, wie Entwicklerinnen und Entwickler heimlich Punkte in Zeit umrechnen, da nicht in Zeit geschĂ€tzt werden darf, sie aber eigentlich mit Zeit wesentlich besser hantieren können als mit einer abstrakten GrĂ¶ĂŸe wie "8 Punkten". Das SchĂ€tzen passiert also letztlich doch in absoluter Zeit, es wird nur mehr oder weniger geschickt verschleiert.

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) ĂŒbermittelt werden. Mehr dazu in unserer DatenschutzerklĂ€rung [2].

Um effektiv mit absoluter Zeit schĂ€tzen zu können, mĂŒssen drei wichtige Punkte beachtet werden. Zum einen mĂŒssen Aufgaben klein genug sein, um sie ĂŒberblicken zu können. Als gute Faustregel hat sich hierbei die GrĂ¶ĂŸenordnung von 16 Stunden bewĂ€hrt. Was in dieser Zeit voraussichtlich nicht umgesetzt werden kann, ist zu groß und muss weiter heruntergebrochen werden.

Zum zweiten macht es einen riesigen Unterschied, wer schĂ€tzt. GrĂŒnde hierfĂŒr sind individuelle FĂ€higkeiten, Kenntnisse, Erfahrung und die persönliche Vorgehensweise. Hinzu kommen die jeweilige Tagesform und zu einem gewissen Grad auch Zufall. Deshalb sollten stets jene Entwicklerinnen und Entwickler eine Aufgabe schĂ€tzen, die sie auch umsetzen werden. Wird gemeinsam im Team geschĂ€tzt, sollte man sich zuvor einigen, wie man mit Diskrepanzen umgeht, ob dann mit dem Mittelwert oder dem Worst Case gerechnet wird, und so weiter.

Zum dritten sollte man ein Bewusstsein dafĂŒr schaffen, dass SchĂ€tzung falsch sein werden. Genau deshalb benötigt man den bereits angesprochenen Puffer, der beispielsweise fĂŒr Fehlersuche und Debugging genutzt wird. Dieser Puffer sollte allerdings multiplikativ und nicht additiv berechnet werden, da er bei grĂ¶ĂŸeren Aufgaben auch entsprechend grĂ¶ĂŸer ausfallen muss. Auch hier muss, wird im Team geschĂ€tzt, zuvor eine gemeinsame Strategie ĂŒberlegt werden.

Wer das alles berĂŒcksichtigt, hat eine gute Ausgangsbasis, zumindest halbwegs verlĂ€ssliche SchĂ€tzung abzugeben. Doch was passiert, wenn man die SchĂ€tzung doch als festen Plan mit starrem zeitlichen Rahmen nimmt?

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) ĂŒbermittelt werden. Mehr dazu in unserer DatenschutzerklĂ€rung [3].

Hier kommt nun das magische Dreieck ins Spiel, das besagt, dass Zeit, Kosten und Umfang einander bedingen. Ändert man eine der GrĂ¶ĂŸen, hat das Auswirkungen auf die anderen beiden GrĂ¶ĂŸen. Beispielsweise gilt, dass weniger Zeit dazu fĂŒhren muss, dass entweder die Kosten steigen oder der Umfang sinkt. Da mehr Kosten in der Regel "ein grĂ¶ĂŸeres Team" bedeutet, mehr Personen aber nicht per se schneller sind (sondern nach Frederick Brooks unter UmstĂ€nden sogar eher den gegenteiligen Effekt haben), bleibt letztlich nur, den Umfang zu reduzieren.

Obwohl das logisch ist, wird es in der Praxis allzu hĂ€ufig missachtet. Obwohl weniger Zeit als ursprĂŒnglich geplant zur VerfĂŒgung steht, bleiben Kosten und Umfang fix – und zunĂ€chst scheint auch alles zu funktionieren, denn das Ende des Projekts liegt noch in weiter Ferne. Doch Verzögerungen summieren sich auf und am Ende wird die Zeit dann doch knapp: Eine leider hĂ€ufig anzutreffende "Lösung" ist, den Druck auf die Entwicklung zu erhöhen.

Allerdings denken Menschen unter Druck nicht schneller, weshalb das nicht funktioniert. Wie eingangs bereits erwĂ€hnt, handelt es sich bei Softwareentwicklung um Entwicklung, nicht um Produktion, und gerade der kĂŒnstlerisch-kreative Anteil funktioniert unter Druck weitaus schlechter.

Dennoch ist der Druck vorhanden, allerdings sucht er sich dann ein anderes Ventil, nĂ€mlich die QualitĂ€t. Das ist der einzige Faktor, an dem sich sparen lĂ€sst, wenn alle anderen Aspekte festgezurrt sind. Allerdings erzeugt man damit eine Lose-Lose-Situation, denn die Kundin oder der Kunde ist nachher ob der mangelhaften QualitĂ€t unzufrieden, und fĂŒr sich selbst hat man ein instabiles Fundament geschaffen, auf dem man nur schwerlich stabil und tragfĂ€hig aufbauen kann.

Genau das wird im sogenannten "Teufelsquadrat" nochmals verdeutlicht: Der Aspekt des Umfangs wird hier zweigeteilt, in "Inhalt" und "QualitÀt".

NatĂŒrlich bedeutet das nicht, dass man Zeit niemals fixieren darf – gerade wenn zum Beispiel auf Messe- oder Konferenztermine hingearbeitet wird, steht der Zeitpunkt nun einmal fest und ist nicht diskutabel. Hier muss dann aber bewusst sein, dass entweder Abstriche am Umfang oder an der QualitĂ€t hinzunehmen sind.

Insbesondere, wenn an der QualitĂ€t gespart wird, sollte im Anschluss aber mehr als ausreichend Zeit vorhanden sein, um die bestehenden MĂ€ngel zunĂ€chst zu beheben, bevor man den entstandenen Code als Ausgangsbasis fĂŒr die weitere Entwicklung nutzt.

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) ĂŒbermittelt werden. Mehr dazu in unserer DatenschutzerklĂ€rung [4].

Ansonsten lĂ€uft man nĂ€mlich Gefahr, in der Entwicklung hĂ€ssliche AbkĂŒrzungen im Code zu verwenden, da man sich nicht die Zeit nimmt, den Code ordentlich zu schreiben. Man baut bewusst "Workarounds" statt Lösungen, fĂŒgt "To-do"- und "Fixme"-Kommentare hinzu. Aus den Initialen der drei Begriffe ergibt sich dann der schöne Begriff "WTF"-Code 


Soll entsprechender Code erweitert werden, traut sich niemand an den Code heran. Stattdessen wird eine Schicht um den Kern gezogen, fĂŒr die allerdings wieder zu wenig Zeit zur VerfĂŒgung steht, was zur nĂ€chsten Schicht fĂŒhrt, und immer so weiter. Jede weitere Schicht macht den Code in exponentiellem Maß komplexer und umfangreicher. Der Aufwand fĂŒr Weiterentwicklung und Pflege steigt enorm, ebenso der Frust und die EnttĂ€uschung. Den Code zu pflegen wird zunehmend mĂŒhsamer.

Das macht die Entwicklung immer langsamer und teurer, bis irgendwann der Punkt erreicht ist, wo sich die Weiterentwicklung nicht mehr rentiert. Dann bleibt nur noch Stillstand – oder, alles von Grund auf neu zu schreiben, was dann aber auch heißt, das Feld fĂŒr mehrere Jahre der Konkurrenz zu ĂŒberlassen. Ob man das als Unternehmen ĂŒberlebt, sei dahingestellt.

Der einzige Weg, das zu vermeiden, besteht darin, QualitĂ€t von Vornherein als oberste PrioritĂ€t auszurufen und zu leben. NatĂŒrlich darf man auch Prototypen und Proof of Concepts bauen, aber diese sollten stets als Wegwerfprodukte im wörtlichen Sinne genommen werden.

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) ĂŒbermittelt werden. Mehr dazu in unserer DatenschutzerklĂ€rung [5].

Softwareentwicklung ist zumindest zu einem gewissen Teil eine Kunst, zu deren AusĂŒbung es Freiraum bedarf. Entwicklerinnen und Entwickler wissen das und strĂ€uben sich daher in aller Regel gegen SchĂ€tzungen, die ihnen eine verbindliche und exakte Planung abverlangen. Eine solche ist nur zu leisten, wenn man einige wichtige Aspekte beim SchĂ€tzen beachtet – was das SchĂ€tzen dann aber enorm aufwendig macht.

Letztlich sollten Unternehmen sich bewusst machen, dass SchĂ€tzungen ungenau und unscharf sind und sein mĂŒssen, dass sie nur zur Koordination von Teams dienen können, aber dass SchĂ€tzungen niemals zum Plan werden dĂŒrfen, an dem Erfolg gemessen wird. Bei all dem darf vor allem auch die QualitĂ€t nicht ins Hintertreffen geraten, denn sie ist das, was langfristig den meisten Schaden anrichtet – dann nĂ€mlich, wenn sie vernachlĂ€ssigt wird. ( [6])


URL dieses Artikels:
https://www.heise.de/-5043561

Links in diesem Artikel:
[1] https://www.heise.de/Datenschutzerklaerung-der-Heise-Medien-GmbH-Co-KG-4860.html
[2] https://www.heise.de/Datenschutzerklaerung-der-Heise-Medien-GmbH-Co-KG-4860.html
[3] https://www.heise.de/Datenschutzerklaerung-der-Heise-Medien-GmbH-Co-KG-4860.html
[4] https://www.heise.de/Datenschutzerklaerung-der-Heise-Medien-GmbH-Co-KG-4860.html
[5] https://www.heise.de/Datenschutzerklaerung-der-Heise-Medien-GmbH-Co-KG-4860.html
[6] mailto:webmaster@goloroden.de