Donnerstag, 30. Juli 2009

Mehr Termindruck braucht die Softwareentwicklung – aber den richtigen [OOP 2009]

heise Developer berichtet gerade über eine Studie in der Java-Welt – das 2. Java-Trendbarometer der expeso GmbH –, die die Verhältnisse bei der Projektabwicklung als nicht sehr rosig darstellt. Das ist mir als .NET-Entwickler ein kleiner Trost, denn ich dachte, in der Java-Welt sei das Gras grüner bzw. die Projektwelt rosig-erleuchteter. Nicht nur hüben, sondern auch drüben gibt es also einiges zu tun.

Die Begründung für die verbesserungswürdigen Zustände:

“Die Qualität leide[t] unter der häufig sehr stark termingetriebenen Entwicklung.”

Wer hätte das gedacht? Ja, alle denken und wissen das. Und viele ringen mit den Händen und fragen, “Ja, was sollen wir denn machen?”

Dabei ist die Lösung ganz, ganz einfach:

Softwareprojekte brauchen noch mehr Termindruck!

Wer hätte das gedacht? Wenige. Aber es ist so. Wir brauchen nicht weniger Termine, sondern mehr. Das ist der Kerngedanke der Agilität. Viele und ganz regelmäßige Termine sind nötig, damit es mit einem Softwareprojekt vorangeht. Die liegen dann 2 oder 3 oder vielleicht auch 4 Wochen auseinander. Und die Zeiträume zwischen den Terminen heißen Iteration oder Sprint.

image Diese Termine sind allerdings keine Meilensteine! Das (!) ist der entscheidende Unterschied zu den heutigen Terminen, die soviel Druck machen. Denn Meilensteine definieren eine Menge von Arbeit, die geschafft sein muss; bei Meilensteinen geht es um Inhalte. Iterationsendtermine drehen sich hingegen nur um verlässliche Zeitangaben.

Iterationen takten die Auslieferung. Sie garantieren, dass zu festgelegten und sehr häufigen Terminen etwas geliefert wird, das Feedback vom Kunden bzw.  seinem Vertreter braucht. Kommt solches Feedback nicht, dann wächst die Gefahr, dass Geld und Motivation schlicht verbrannt werden. Deshalb sind es auch immer mehr Iterationsendtermine als Meilensteintermine in einem Projekt. Softwareprojekte profitieren davon, wenn Entwickler und Kunden quasi ständig kurz vor einem Abgabetermin stehen. Das nächste Release – in welcher Größe auch immer – ist immer nur maximal 2-3 Wochen in der Zukunft. Es ist sozusagen immer “Meilensteinendphase” – allerdings ohne den Scope-Druck der Meilensteine.

Denn da liegt das wahre Übel bei der Projektabwicklung: Termindruck ist nur ein Symptom von Scope-Druck, d.h. vom Anspruch eine bestimmte Menge an Inhalten zu schaffen.

Und woher kommt diese Vorstellung, dass sich zu einem Termin eine vordefinierte Menge an Inhalten, an Features produzieren ließe? Die resultiert aus einem Grundmissverständis her. Es stammt aus einer Zeit, da Softwareentwicklung im Grunde nur Hardwaremanipulation war. Sie ist ein Relikt aus der Elektrotechnik und dem Maschinenbau, die beide ausgedehnte Produktionsphasen kennen.

Mit solchen Produktionsphasen wird Softwareentwicklung verwechselt. Für ein Auto oder einen Schaltkreis oder ein Gebäude können wir schon lange recht gut angeben, wann die Produktion zu welchem Prozentsatz abgeschlossen ist. Bauphasen lassen sich planen – vorbehaltlich auftretender Störungen z.B. durch Probleme mit Lieferanten oder am Produktionsort.

Doch Softwareentwicklung ist keine Produktion! Softwareentwicklung ist Entwicklung, Entwurf, Design, Kreativität, Problemlösung. Niemand sage also, er hätte es nicht gewusst. Im Deutschen wie im Englischen steckt die Natur der Sache schon im Begriff: Softwareentwicklung, software development. Nomen est omen.

image Jack W. Reeves hat das schon vor bald 20 Jahren deutlich herausgearbeitet. Er sieht “Code as Design”. Seine unmissverständlichen Worte sind hier zu lesen, und hier gibt es noch ein Wiki zum Thema. Dennoch scheint die Fehlwahrnehmung unausrottbar. Denn nicht anders ist zu erklären, dass immer noch Meilensteine als erreichbar gelten.

Wer hätte jedoch von Meilensteinen bei kreativen Aufgaben je gehört? Die Entwicklung (!) des iPod hat sicherlich nicht in festgelegten Meilensteinen stattgefunden. Die Entwicklung (!) des Smart hat sicher nicht in Meilensteinen stattgefunden. Nichts anderes ist aber auch die Entwicklung (!) einer Warenwirtschaft oder eines Dokumentenverwaltungssystems.

Entwicklung ist ein kreativer Prozess, der zwar ein grundsätzliches Ziel hat - aber bei dem man erstens nicht weiß, wie ganz haargenau das Ziel eigentlich aussieht, und zweitens wann es denn erreicht sein wird. Das ist ein fundamentales Gesetz der Softwareentwicklung. Sicherlich muss ein Entwicklungsprozess Fortschritte machen; das Gefühl einer stetigen Annäherung an das ungenaue Ziel muss da sein. Aber ansonsten ist nichts fix. Ab einer gewissen Reife der Entwicklung kann quasi immer jemand sagen, “Es ist genug! Ich bin zufrieden. Lassen wir es dabei. Wir gehen in Produktion.”

Entwicklung lässt sich nicht in Meilensteinpakete aus Inhalt+Termin verpacken. Entwicklung lässt sich höchstens zeitlich takten, um sicherzustellen, dass sie fortschreitet. Das ist alles. Das ist die Natur der Sache der Softwareentwicklung.

image Und deshalb braucht Softwareentwicklung mehr Termindruck, quasi den ständig drohenden Termin. Interessanterweise droht der dann aber gar nicht mehr, wenn ihm keine Inhaltslast mehr anhaftet. Der ständig in 2-3 Wochen liegende nächste kleine Abgabetermin kann vielmehr als eine produktive Rhythmisierung der Arbeit empfunden werden.

Nur eine kleine Voraussetzung ist dafür nötig: Vertrauen. Vertrauen in die Teammitglieder, dass sie bis zum nächsten Termin ihr Bestes geben, soviel wie mit vernünftigem Zeitaufwand eben möglich ist auch inhaltlich umzusetzen. Aber das ist ein anderes Thema.

5 Kommentare:

Mi,ke Hummel hat gesagt…

Hallo,
aus meiner Sicht ist das nicht so, denn Software-Entwicklung ist nicht nur Entwicklung, sondern auch Fleißarbeit. ist mir die Anforderung bekannt, sind alle technischen Hürden geprüft und ein Weg/Konzept zur Überwindung gefunden ist der Rest der Arbeit Handwerk. Und dieses Handwerk kann ich Planen - auch zeitlich. Natürlich werden auch hier noch Designentscheidungen - im kleinen - getroffen, die aber den Gesamtaufwand kaum Auswirkungen haben.

Entscheidend ist, dass das Konzept im Vorfeld stimmt, das alle technischen Probleme gefunden wurden, dass das Ergebnis mit dem Kunden nochmals durchgegangen wurde. Erst jetzt ist eine Aufwandsschätzung möglich.

Das am Ende noch eine Abnahme mit bugfixing und korrekturen eingeplant werden muss ist selbstverständlich - das hat man beim Hausbau auch.

Agile Methoden benötigt man vor allem wenn man am Anfang nicht genau weiß, wo man am Ende hin will, wenn man neue Ansätze umsetzen will oder das Projekt keinen Auftraggeber hat.

Ralf Westphal - One Man Think Tank hat gesagt…

@Mike: Hier sehe ich die große Illusion der Softwareentwicklung: "ist mir die Anforderung bekannt, sind alle technischen Hürden geprüft und ein Weg/Konzept zur Überwindung gefunden" passiert einfach so selten. Und wenn man meint, dass es passiert, dann stellt sich hinterher meist raus, dass es doch nicht passiert ist.

Vor allem gibt es meist große Unterschiede in der Auffassung, ob der Fall schon eingetreten sei. Da meint der Projektleiter womöglich ganz was anderes als der Entwickler.

Und selbst wenn der Entwickler meint, es sei so, dann überschätzt er sich oft und unterschätzt das Vorhaben - aber bewegt sich innerhalb des Wunschdenkens des Projektleiters. Damit ist dann grünes Licht auf dem Weg ins Desaster gegeben.

Falls, ja, falls wirklich alles fix ist - Anforderungen, Technologien, Wissensstand der Entwickler, klare Umsetzungsvorstellungen -, dann kann man schätzen und Meilensteine definieren. Leider kenne ich kein Projekt, in dem das verlässlich und wiederholbar der Fall ist.

Aber selbst wenn ich ein oder zwei solcher Projekte kennen würde, bedeutet das nicht, dass sich solches verallgemeinern ließe. Ich glaube nicht, dass sich solcher Zustand systematisch herstellen lässt. Insofern lässt sich kein Idealbild ableiten - und wir sind wieder beim großen Missverständnis in puncto Softwareentwicklung. Sie produziert nicht, sondern entwickelt eben kreativ. Und das ist im Scope nicht zu terminieren.

-Ralf

Rainer Hilmer hat gesagt…

@Mike: Du schreibst, "...ist mir die Anforderung bekannt, sind alle technischen Hürden geprüft und ein Weg/Konzept zur Überwindung gefunden...".

Du hast die Probleme ja schon selber beschrieben. Kunden wissen anfangs selber oftmals nicht so genau was sie haben wollen (Anforderungen). Der Appetit kommt mit dem Essen, "... ja dann wäre diese Option doch noch toll...". Was sich mit einem Satz lapidar mal eben sagen lässt, kann sich in der Realisierung als Problem herausstellen, oder eine Umstrukturierung erforderlich machen.
Welche technischen Hürden im Verlauf auftreten, ist nur bei Softwareprojekten von vorn herein klar, die man von der Funktionalität her schon kennt, also Routine vorweisen kann. Da gerade in der IT-Welt der Fortschritt aber Riesenschritte macht, und ein IT-Kunde der etwas um sein Image gibt, auf dem Stand der Technik sein will, steht man als Entwickler auch immer wieder auf Neuland.

Anonym hat gesagt…

Die Behauptung, SW-Entwicklung bräuchte pauschal IRGENDWAS ist bestenfalls fragwürdig. Sie berücksichtigt weder das Umfeld, in dem die Software geschrieben wird, noch vorhandenes Wissen bzw. Erfahrung der Entwickler (oder der Kunden), noch die Größe oder Natur des Projektes.

Die Suggestion, es gäbe eine universal anwendbare "ganz, ganz einfache Lösung" für Softwareentwicklungsprojekte ist vor diesem Hintergrund unhaltbar und sollte maximal als Verweis über einen angenommenen Tellerrand hinaus verstanden werden.

Ralf Westphal - One Man Think Tank hat gesagt…

@Anonym: Leider ist die Empfehlung, sich von jeder pauschalen Empfehlung zurückzuhalten, ebenfalls pauschal und somit selbstbezüglich - d.h. sie ist ebenfalls fragwürdig. Womit wir beim Anfang wären.

Ich kann es auch anders sagen: Da, wo der Verweis ewig in die Relativierung zeigt, wo immer mahnend und aufschiebend "Es kommt darauf an!" gerufen wird, da wird nichts bewegt. Insofern halte ich klare, womöglich polarisierende Worte für wichtig.

Wo Polarisierung ist, da entsteht ein Kraftfeld. Da muss man Position beziehen, d.h. man ist gezwungen selbst nachzudenken. Darum geht es mir.

Beim Nachdenken ist man dann gut beraten, nicht in den Himmel zu schauen, sondern vor die Füße. Was sehen wir da in der Softwareentwicklung, wie gerade die Befragung in der Java-Welt (wieder) ergibt: einen Scherbenhaufen.

Geht man nah ran, sieht man Material, das in Ordnung ist. Irgendwie geht es irgendwo voran. Natürlich sind nicht alle Projekte ein Desaster. Im Detail klappt auch was.

Auf das große Ganze bezogen gibt es aber keinen Zusammenhalt der Bruchstücke. Und bis zum Beweis des Gegenteils behaupte ich einfach mal, das liegt auch daran, dass man vielfach das Problem Softwareentwicklung falsch einsortiert, es z.B. als ein Produktionsproblem sieht und daher mit bewährten Produktionssteuerungsinstrumenten versucht zu lösen. Das geht dann schief. Da hilft auch nicht "mehr vom selben", "wir haben es noch nicht doll genug probiert."

Deshalb ist ein Schritt zurück und die Erlaubnis des Gedankens, dass es eben komplett anders sein könnte, nützlich. Diese Alternative habe ich ja auch nicht erfunden. Die ist mittlerweile auch schon - je nach Rechnung - 10 oder 25 Jahre alt. Nur erweisen sich wohl einige Bereiche der Softwareentwicklung als erkenntnisresistent.

In ruhiger Atmosphäre können wir über alles differenziert plaudern, das Für und Wider abwägen, den Mittelweg suchen. Kein Problem.

Damit aber überhaupt sich jemand mal hinsetzt und Zeit nimmt, nachzudenken, dazu ist manchmal etwas Wachrütteln nötig. Das tut die Umfrage, das tue ich mit vielleicht pauschalen Äußerungen.

Es geht ja gar nicht um einen neuen Hype. Es geht um alte Erkenntnisse, die offensichtlich immer noch Schwierigkeiten haben, sich in der Praxis durchzusetzen. Das lässt mich kopfschütteln.

-Ralf

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.