Die Antwort auf die Frage, warum es eine gute Idee ist quali­tativ hochwertige Software herzu­stellen, ist in sich logisch und für alle Parteien des Entwick­lungs­pro­zesses leicht verständlich.

Klar ist: Alle Kunden möchten natürlich gerne ein quali­tativ hochwer­tiges Software­produkt, dass allen Anfor­de­rungen entspricht. Es sollte ebenfalls billiger sein, zum festge­legten Zeitpunkt lieferbar sein, zukünftige Wartungs­kosten, Problem­kosten und Fehler aber gleich­zeitig aussparen. Die Anfor­de­rungen sind also hoch. Auf der anderen Seite versuchen Software-Hersteller, ihre Produkte recht­zeitig und in hoher Qualität herzu­stellen, um ihre eigenen Kosten für die Garan­tie­phase zu minimieren. Deswegen verfolgen beide Parteien des Software­ent­wick­lungs­pro­zesses mindestens zwei identische Ziele: Das Produkt soll recht­zeitig zu Verfügung gestellt werden und es muss die höchste denkbare Software­qua­li­täts­stufe erreichen.

Welche Folgen hat also die Erschaffung quali­tativ hochwer­tiger Softwareprodukte?

Zunächst erhöht sie die Chancen auf eine erfolg­reiche Projekt­ab­wicklung und dessen recht­zei­tiger Fertig­stellung. Das führt in der Konse­quenz zu einem effizi­enten Start der Software. Die Garan­tie­kosten werden für beide Parteien gesenkt. Dieser Vorteil der Kosten­senkung ist nicht hoch genug einzu­schätzen im heutigen kosten­ori­en­tierten Unter­neh­mer­dasein. Die generelle Entwick­lungszeit eines Produktes wird reduziert, da die Entwickler sich nicht mit Bugs und Fehlern herum­schlagen müssen. Es kann also zielge­richtet und effizient gearbeitet werden.

Aus der Perspektive des Software­ent­wick­lungs­un­ter­nehmens gibt es direkte und indirekte Gründe dafür, quali­tativ hochwertige Software herzu­stellen. Welche Effekte lassen ich für das Unter­nehmen dabei feststellen?

Die Nutzung von quali­tativ hochwer­tiger Software­pro­dukte reduziert die internen Entwick­lungs­kosten und die erhöht die Durch­füh­rungs­ge­schwin­digkeit der verschie­denen Aufgaben im Arbeits­prozess. So wird beispiels­weise ein totaler Arbeits­stopp wegen Software­pro­blemen verhindert, ein Wechsel zu anderen Aufga­ben­stel­lungen vermieden, eine Bugsuche durch­ge­führt, ein Gegen­check von Entschei­dungen sicher­ge­stellt, eine Suche für Umgehungs­op­tionen einge­setzt und eine Wahrung der Leistungs­fä­higkeit erwirkt. All dies ist für ein Unter­nehmen bares Geld wert. Weiterhin wird der Kunde nun an das Unter­nehmen gebunden, so lange seine Zufrie­denheit mit den Produkten im Vorder­grund steht. Zuletzt stellt sie einen schier unüber­wind­lichen Wettbe­werbs­vorteil gegenüber der Konkurrenz dar, wenn es darum geht neue Auftrags­aus­schrei­bungen für Software­ent­wicklung zu gewinnen.

Eine Reduzierung von Bugs in einem Programm spricht zweifellos für die Kompetenz des Software-Entwicklers. Die Zufrie­denheit des Kunden wird deutlich gesteigert, ebenso wie die Wahrschein­lichkeit zukünf­tiger Aufträge, was für das Unter­nehmen entscheidend sein kann. Obendrein werden auch positive Empfeh­lungen für das Unter­nehmen weiter­ge­geben, was einen neuen Kundenpool erschließen helfen kann.

Der letzte Punkt sind die Upgrade-Möglich­keiten, die eine Software wider­stands­fä­higer gegen neue Konkur­renz­pro­dukte machen. Der Kunde muss die alte Software nicht ersetzen, sondern behält sie auf höchstem Standard.

Um wirkungs­volle IT-Lösungen zu planen und zu konzi­pieren, ist ein profes­sio­nelles Projekt­ma­nagement unumgänglich. Dabei sollten vor allem die Zielvor­gaben für die spezi­fische IT-Lösung klar definiert und das Projekt darauf aufbauend detail­liert konzi­piert werden. Zudem sollten Software-Projekte aufgrund ihrer Komple­xität generell in Arbeits­schritte aufge­teilt werden, nach deren Abschluss die jewei­ligen Ergeb­nisse analy­siert und für die weitere Konzeption berück­sichtigt werden. Da diese IT-Ergeb­nisse in ihren Auswir­kungen meist schwer abzuschätzen sind, sollten Sie unbedingt auf agile Projekt­me­thoden und die richtigen Techno­logien setzen. Aber auch der Anwender der späteren IT-Lösung sollte in den Konzep­ti­ons­prozess mit einge­bunden werden. Da profes­sio­nelles Projekt­ma­nagement zur Planung und Konzeption von IT-Lösungen so komplex inein­ander greifen, ist es eine logische Folge, dass die Nachfrage danach in Unter­nehmen konti­nu­ierlich steigt. Einige Kernpunkte, auf die beim profes­sio­nellen Projekt­ma­nagement zur Planung und Konzeption von IT-Lösungen zu achten ist, werden im Folgenden dargestellt.

Von der Wichtigkeit klarer Zielde­fi­ni­tionen vor Projektbeginn

Bereits die ESI-Studie aus dem Jahr 2005 ergab, dass geschei­terte IT-Projekte häufig auf fehlende oder gar unzurei­chende Zielde­fi­ni­tionen zurück­zu­führen sind. Daher sollten bereits vor der Planung und Konzeption von IT-Lösungen diese spezi­fisch festge­halten, von allen Betei­ligten akzep­tiert und zeitlich termi­niert worden sein. Dazu sollten ein gezieltes Projekt erstellt und festge­halten werden, wem welche Verant­wortung dabei zufällt und in welcher Zeit die einzelnen Arbeits­schritte abzuschließen sind.

IT-Projekte aufgrund ihrer Komple­xität in Entwick­lungs­phasen aufteilen

Da Projekte, die innerhalb derer IT-Lösungen geplant und konzi­piert werden komplex sind, sollten diese in Entwick­lungs­phasen aufge­teilt werden. Nach jeder Entwick­lungs­phase sollten die bisher erreichten Ergeb­nisse ausgiebig getestet und überprüft werden. Die Auswertung der Ergeb­nisse sollte im Folgenden dann auch für die zukünf­tigen Entwick­lungs­phasen berück­sichtigt, bzw. überar­beitet werden.
Agile Projekt­me­thoden ermög­lichen es außerdem, auf die Komple­xität eines IT-Projekts zu reagieren, indem zum Beispiel im Nachhinein noch Änderungs­wünsche vom Kunden berück­sichtigt werden können. Generell ist es dabei ratsam, dass die Anwender der späteren IT-Lösung in den Projekt­ablauf mit einbe­zogen werden, um auch hier zu erkennen, was zwingend einer Korrektur bedarf.

Moderne Software-Entwicklung ist eine sehr struk­tu­rierte und bis ins Detail durch­dachte Angele­genheit. Ein Ausdruck dieser klaren Struktur sind nicht nur das Lasten- und Pflich­tenheft, bei denen detail­liert festge­halten wird, welche Funktionen mit welchen Techniken erreicht werden sollen, sondern auch die rollen­ba­sierte Software-Entwicklung. Sie ermög­licht es jedem an der Entwicklung Betei­ligten, sich voll und ganz auf seine spezi­fische Aufgabe zu konzentrieren.

Rollen­ba­sierte Software-Entwicklung

Der Gedanke hinter der Struktur ist einfach: Durch die enge Inter­aktion von Menschen mit unter­schied­lichen Schwer­punkten wird ein breites Spektrum abgedeckt und so ein Produkt entwickelt, das möglichst vielen Anfor­de­rungen gerecht wird. Dabei ist es vor allem bei größeren Projekten dringend erfor­derlich, dass die Inter­aktion nicht nur mündlich erfolgt, sondern auch stark dokumen­ten­ba­siert ist.

Die Rolle

Unter der Rolle versteht man in der rollen­ba­sierten Entwicklung eine Menge zusam­men­ge­hö­riger Aufgaben, Quali­fi­ka­tionen und Befug­nisse. Sie kann von einer oder mehreren im Team zusam­men­ar­bei­tenden Personen wahrge­nommen werden. Gleich­zeitig kann ein Team oder eine Person auch mehrere Rollen erfüllen.

Folgende Rollen können in einem Software­projekt besetzt werden.

1. Projekt­ma­nager
Seine wesent­lichen Aufgaben sind die Planung, Kontrolle und Steuerung des Projekts.
2. Risikomanager
Seine Aufgabe ist es, poten­zielle Probleme zu erkennen und entspre­chend Abhilfe zu schaffen. Er ist in alle Phasen des Projekts involviert.
3. Der Qualitätsmanager
Er hat eine projekt­be­glei­tende Aufgabe und ist verant­wortlich für die Qualität des erzeugten Produkts. Er stellt Anfor­de­rungen, überwacht deren Einhaltung und kümmert sich um Maßnahmen zur Qualitätssicherung.

Weitere Rollen sind der Konfi­gu­ra­ti­ons­ma­nager, der Anfor­de­rungs­ana­ly­tiker, Konzep­tionier, Designer und letztlich der Program­mierer. Komplet­tiert wird das Ganze durch den Tester, den System­tech­niker, den Techno­lo­gie­be­rater, den Wartungs­experten, den Daten­sammler, den Software-Prozess­ver­bes­serer, den Wieder­ver­wender und die entspre­chenden Verant­wort­lichen auf den Führungsebenen.

Rollen in der Softwareentwicklung

Nicht alle der aufge­führten Rollen werden in jedem Software­projekt besetzt. Doch die wichtigsten, wie Projekt­ma­nager und Quali­täts­ma­nager, aber auch die Program­mierer finden sich so in jeder erfolg­reichen Software-Entwicklung wieder.

Die iterative Entwicklung beschreibt den Ansatz, ein Gesamt­projekt in viele kleine Projekte aufzu­teilen. Es werden in jeder Iteration alle Phasen, also Analyse, Entwurf (Grob- und Feindesign), Imple­men­tierung und Test durch­ge­führt. Nach jeder Iteration sollte eine Abnahme mit dem Kunden erfolgen, um so die Anfor­de­rungen und die Qualität der Software zu überprüfen.

Der Vorteil hierbei ist, dass Mängel bei jedem Itera­ti­ons­schritt beseitigt werden können und so das System ständig verbessert wird – durch Optimierung bereits bestehender Kompo­nenten oder Ergänzung um weitere.
Neben der konti­nu­ier­lichen Problem­be­he­bungs­mög­lichkeit bringt das iterative Vorgehen bei der Software­ent­wicklung auch den Vorteil, dass in diesem Ansatz gut auf Änderungen der Anfor­de­rungen während des Projekt­ab­laufs einge­gangen werden kann. Außerdem lässt sich so auch das Risiko unange­mes­sener Funktio­na­lität und überhand nehmender Kosten einschränken. Diese Vorge­hens­weise ermög­licht es,  technisch oder inhaltlich sehr riskante Bereiche eine Software­pro­jektes zuerst anzugehen.

Aller­dings bringt die mehrmalige Durch­führung der Entwick­lungs­phasen den Nachteil mit sich, dass das Projekt zeitlich schwer planbar ist, da bei jeder Iteration Zeitpuffer für die Reaktion auf aufkom­mende Probleme einkal­ku­liert werden müssen.

Der Ansatz der itera­tiven Entwicklung wird in vielen Vorge­hens­mo­dellen angewandt. Eines dieser Vorge­hens­mo­delle ist das sogenannte Spiralmodell.

Das Spiral­modell nach Boehm ist in folgende vier Schritte aufgeteilt:
Im ersten Schritt, der Analyse, werden alle wichtigen Infor­ma­tionen wie Ziele, Anfor­de­rungen, Rahmen­be­din­gungen und Lösungs­al­ter­na­tiven zusam­men­ge­tragen. Diese werden zur Umsetzung freige­geben und im zweiten Schritt evaluiert, um Risiken zu erkennen und entspre­chende Minde­rungs- bzw. Vermei­dungs­stra­tegien zu erarbeiten.
Anschließend wird nun das Vorgehen für die Reali­sierung festgelegt und durch­ge­führt. Schließlich wird in Schritt vier kritisch auf die voran­ge­gangen Schritte geschaut und der nächste Schlei­fen­durchlauf geplant.
Im Spiral­modell stellen die vier Quadranten die Vorge­hens­schritte dar und eine Linie zeigt den Fortschritt des Projektes, wodurch sich das für dieses Modell charak­te­ris­tische Spiral­muster ergibt. Die Proto­typen, die in jedem Schlei­fen­durchlauf erstellt werden, ermög­lichen, das System fortlaufend zu prüfen und weiterzuentwickeln.

Bei der Software­ent­wicklung können Probleme auftreten, die Folgen nach sich ziehen: Es besteht die Gefahr, dass die ursprünglich geplanten Entwick­lungs­kosten überschritten werden und sich die Entwick­lungs­dauer in die Länge zieht. Zudem besteht die Gefahr, dass das Endprodukt quali­tative Mängel aufweist.

Program­mier­stan­dards müssen einge­halten werden

Wenn jeder Entwickler Program­mier­stan­dards auf seine eigene Weise inter­pre­tiert, kann es zu erheb­lichen Diskre­panzen bei den Ergeb­nissen kommen, wodurch aufwen­diges Nachar­beiten nötig wird. Es empfiehlt sich, interne Handbücher mit den Program­mier­stan­dards zur Verfügung zu stellen und vor allem darauf zu achten, dass diese von den Projekt­mit­ar­beitern auch verwendet werden.

Auf die fachliche Quali­fi­kation der Mitar­beiter achten, die am Projekt beteiligt sind

Bei jedem Projekt sollte sicher­ge­stellt sein, dass sämtliche invol­vierte Mitar­beiter fachlich ausrei­chend quali­fi­ziert sind. Dies gilt besonders für sehr komplexe Software­pro­jekte, an denen viele Entwickler beteiligt sind. Ebenso ist es wichtig, dass die einzelnen Mitar­beiter über ein ähnliches fachliches Niveau verfügen, um Verstän­di­gungs­schwie­rig­keiten unter­ein­ander zu vermeiden.

Ständig neue Mitar­beiter ins Team holen

Bei der Software­ent­wicklung sollte vermieden werden, dass während eines laufenden Projekts die damit beauf­tragten Entwickler ausscheiden und durch neue Mitar­beiter ersetzt werden. Denn verlässt ein Mitar­beiter während der Entwicklung das Unter­nehmen oder wechselt zu einem anderen Projekt, gehen die bisher gesam­melten Erfah­rungen mit der werdenden Appli­kation meist verloren. Erfah­rungs­gemäß ist es äußerst schwer, das Wissen eines ausschei­denden Mitar­beiters auf den neuen Entwickler zu übertragen.

Für klare Prozesse sorgen

Intrans­pa­rente Abläufe in der Software­ent­wicklung führen zur Verun­si­cherung der Betei­ligten. Missver­ständ­nisse entstehen, wodurch sich Fehler einschleichen, die nur durch einen erhöhten Aufwand wieder beseitigt werden können und das Projekt zieht sich unnötig in die Länge. Es wird empfohlen, die Anwen­dungs­ent­wicklung im System von Produk­ti­ons­straßen aufzubauen.

Priori­täten setzen

Es fällt immer wieder auf, dass bezüglich der geplanten Features keine Priori­täten gesetzt werden, was meist zur Folge hat, dass die Features in der falschen Reihen­folge abgeschlossen werden. Deshalb sollte ein Team im Vorfeld entscheiden, welcher Arbeits­schritt als Erstes angegangen wird. Es empfiehlt sich, die Entscheidung intern vorzu­nehmen und den Auftrag­geber außen vor zu lassen. Denn Auftrag­gebern fehlt oft die Übersicht, welches Feature für den Erfolg des Projekts besonders wichtig ist.

Die Wahl der richtigen Software im Unter­nehmen und der dazu gehörenden Technik im Hinter­grund ist eine grund­le­gende Fragen. Hier kann es z.B. um die Verwaltung von Daten und Dokumente gehen. Jede vorhandene Lösung hat Vor- und Nachteile. Gerade in größeren Unter­nehmen, aber vor allem in spezia­li­sierten Firmen können die Standard­lö­sungen nicht immer das optimale Paket bieten, mit dem z.B. Dokumente oder andere Daten verwaltet werden können. Daher geht der Trend zur indivi­du­ellen Softwarelösung.

Hierbei spielen verschiedene Überle­gungen eine Rolle: Eine typische Voraus­setzung ist sicher, wenn die bestehenden Standard­pro­dukte zwar gut ins Konzept passen, aber gegenüber einer zugeschnit­tenen, indivi­du­ellen Variante schlicht teurer sind. In vielen Fällen sind keine Standard­pro­dukte vorhanden, die die gefor­derten Aufgaben erfüllen können. Weit komplexere Gründe sind die Unabhän­gigkeit vom Anbieter. Hat man sich früh für eine Standard­software entschieden, ist man vom Willen zu möglichen Verän­de­rungen dieses Anbieters abhängig und kann nicht mehr ohne großen Aufwand in ein vielleicht besseres System wechseln. Eine eigene optimierte Software­lösung kann somit auch ein entschei­dender Vorteil gegenüber der Konkurrenz sein. Eine optimale Software­lösung kann die Beziehung zum Kunden einfacher, trans­pa­renter und somit besser gestalten.

Die prakti­schen Vorteile und Begrün­dungen lassen sich wie folgt zusam­men­fassen: Indivi­duelle Lösungen können besser auf bestimmte Voraus­set­zungen und Anfor­de­rungen angepasst werden. Gleich­zeitig sind sie damit auch besser in der Lage, mit den steigenden Anfor­de­rungen ergänzt zu werden und somit zu wachsen. Der Aufwand für Mitar­bei­ter­schu­lungen wird meist erheblich verringert, wenn die Einga­be­masken an die bestehenden Betriebs­ab­läufe und das Vokabular angepasst sind. Zusätzlich können notwendige Regeln und Plausi­bi­li­täts­prü­fungen möglich gemacht werden, die automa­tisch verhindern, dass Aufträge mehrfach bearbeitet werden müssen. Mit diesen variablen Bestand­teilen kann die eigene Software­lösung optimal an die bestehenden Systeme und Anfor­de­rungen angepasst werden und ermög­licht es dem Unter­nehmen, seine Ressourcen optimal und gewinn­bringend einzu­setzen. Sind die Zielkri­terien klar definiert, können Anbieter für Indivi­du­al­lö­sungen ein Produkt zusam­men­stellen, dass die bestehenden Systeme und die neue Benut­zer­ober­fläche aufein­ander abstimmt und mitein­ander vernetzt. Spätere Änderungen oder Erwei­te­rungen sind auf diesem Weg einfacher zu bewerkstelligen.