Termin/Budget/Qualitäts-Probleme in Softwareprojekten

Typische Probleme bei der Softwareentwicklung

Warum schaffen wir Softwareentwickler es eigentlich nicht, eine präzise Schätzung über unsere Arbeit abzuliefern? Andere Berufszweige setzen Termine/Meilensteine in Projekten und meistens werden diese auch eingehalten, warum also gelingt das bei uns nicht?

Natürlich gibt es Dinge, die auch bei anderen Berufszweigen Probleme bereiten würden, wie:

  • Mangelnde Kompetenz der Mitarbeiter
  • Entwickler werden auch in anderen Produkten/Projekten eingesetzt und dort fällt mehr Arbeit an als erwartet
  • Unbekannte Technologien/Frameworks/Thematik

Nichts desto trotz ist es auffällig, wie häufig es Probleme bei Softwareprojekten gibt.
Es gibt 3 Merkmale, die für  für einen Kunden normalerweise entscheidend sind – Kosten/Termine/Funktionalität – häufig werden in Softwareprojekten maximal 2 von diesen 3 Merkmalen erreicht.

Ist Softwareentwicklung = Produktion?

Inzwischen bin ich der Meinung, dass diese Probleme auftreten, weil die Disziplin Softwareentwicklung von den meisten Personen falsch interpretiert wird. Man versucht aus einer Entwicklertätigkeit eine Produktion zu machen. Bei einer Produktion (z.B. der Bau eines Hauses) benötigen bestimmte Tätigkeiten ein bestimmtes Mass an Ressourcen, Kosten und Zeit. Einzelne Tätigkeiten können also gebündelt, berechnet und in Meilensteine verpackt werden.

Softwareentwicklung ist keine Produktion – Softwareentwicklung ist wie der Name schon sagt Entwicklung aber auch Entwurf, Design, Kreativität.

Es ist also fast unmöglich für eine Entwicklungstätigkeit vorher einen Meilenstein (Inhalt+Termin) zu definieren und diesen auch so wie geplant und in der gewünschten Qualität zu erreichen.

Softwareprojekte erfolgreicher gestalten

Jetzt wissen wir also, dass die Sichtweise auf die Disziplin Softwareentwicklung falsch ist. Uns müsste aber auch klar sein, dass sich diese Sichtweise in nächster Zeit bei den Kunden, den Chefs und womöglich auch bei den Entwicklern selber nicht einfach so ändern wird. Was kann man also dagegen tun?

  • Es sollte bei Softwareprojekten darauf geachtet werden, dass die Faktoren Termine/Meilensteine so grosszügig wie nur möglich ausgelegt werden. So entsteht kein Druck eine bestimmte Funktionalität auf einen bestimmten Zeitpunkt auszuliefern
  • Es ist essentiell sehr eng mit dem Kunden zusammenzuarbeiten und ihn in kurzen Intervallen das Produkt prüfen/testen zu lassen, damit er ein Feedback zu den Fortschritten geben kann. Auch sollte dem Kunden klar gemacht werden, dass es wichtiger ist ein Fortschritt zu sehen, als einen bestimmten Fortschritt zu einem bestimmten Zeitpunkt.
  • Entwickler müssen die Illusion ablegen, dass der Kunde von Anfang an alles bis ins Detail spezifizieren kann und wenn er das nicht tut, das Projekt nicht sauber durchgezogen werden kann. Der Entwickler kann schliesslich auch nicht alles voraussehen
  • Den Entwicklern muss klar sein, dass sich Anforderungen im Laufe eines Projektes immer wieder ändern und dass die Entwicklungs darauf vorbereite sein muss (Kapselung, Erweiterbarkeit der Software)
  • Die Entwicklung sollte beim Kunden (also auf GUI-Ebene) starten und dann langsam ins Detail fortschreiten. Somit bekommt der Kunde schon sehr früh ein Gefühl dafür, ob etwas so funktioniert, wie er es sich vorgestellt hat, bzw. ob noch etwas zusätzliches benötigt wird. Entwickler tendieren dazu hinten zu beginnen und merken dann später, dass der Kunde die entwickelte Funktion anders haben will, oder sie gar nicht benötigt.
  • Das Produkt sollte ab einem gewissen Zeitpunkt der Entwicklung jederzeit auslieferbar und “fertig” sein. Das heisst, es sollte zu jedem Zeitpunkt der Entwicklung eine lauffähige Version des aktuellsten Entwicklungsstandes gefertigt werden können (Test Driven Development, Continuous Integration). Somit kann bei finanziellen und bei Terminschwierigkeiten auf den letzten Entwicklungsstand zurückgegriffen werden.

Quellen
Ralf Westphal – One man think tank
Clean Code Developer

1 Response

Leave a Reply

Your email address will not be published. Required fields are marked *