“Kompliziert” und “Komplex”
Was bedeutet “kompliziert” und gibt es einen Unterschied zu “komplex”? Oft werden die beiden Ausdrücke synonym verwendet: „kompliziert“ gleich „komplex“ gleich „nicht einfach“. Was unterscheidet die beiden Begriffe und warum spielt dies gerade im Kontext agiler Vorgehensweisen eine wichtige Rolle?
Was mit dem Begriff "kompliziert" gemeint ist, lässt sich sehr gut am Beispiel von aufwendigen Fertigungsprozessen erklären, wie sie in der Industrie vorkommen. Sie beinhalten eine Vielzahl von einfachen Einzelschritten, die in einer bestimmten Reihenfolge durchgeführt werden müssen. An vielen Stellen ist ein koordinierter Einsatz von Menschen und Maschinen nötig, um einen Teilschritt zu komplettieren.
Letztlich ändert weder die Vielzahl der Schritte, die Beachtung der Reihenfolge, der Einsatz von Maschinen noch die notwendige Zeit etwas an der Tatsache, dass sich die Einzelschritte, abgesehen von ihrer zeitlichen Einordnung, nicht auf andere Schritte auswirken. Sie lassen sich isoliert betrachten und optimieren. Dies charakterisiert einen komplizierten Prozess bzw. ein kompliziertes System.
Im Unterschied dazu, wird ein komplexes System so definiert:
Komplexe Systeme sind Systeme [..], welche sich der Vereinfachung verwehren und vielschichtig bleiben.
(Quelle: Wikipedia)
Ein zentrales Element ist also das Unvermögen eines Systems, sich vereinfachen zu lassen. Der Versuch, ein Objekt eines Systems zu ändern, beeinflusst durch diesen Eingriff direkt andere Objekte des selben Systems. Mathematischer gesprochen: ich kann einen Parameter nicht ändern, ohne auch andere Parameter zu beeinflussen. Die Parameter sind nicht unabhängig von einander. Eine Optimierung des Systems kann nicht trivial durch die Optimierung eines einzelnen Parameters, losgelöst vom Rest, erfolgen.
In der modernen Softwareentwicklung ist man zu der Erkenntnis gelangt, dass sie sich letztlich auch wie ein komplexes System verhält und nicht wie ein kompliziertes. Es sind sehr viele Parameter wie Kundenwünsche, technische Randbedingungen, zeitliche Randbedingungen, monetäre Randbedingungen usw. im Spiel und die meisten dieser Parameter beeinflussen sich zudem gegenseitig. Es gibt in der Produktentwicklung zwar oft grobe Feature- oder Produktideen, die initial vorhanden sind, aber viele Details, der zu erstellenden Software, sind ungeklärt. Dies beruht darauf, dass in einer nennenswert umfangreichen Software so viele verschiedene Nutzungswege und Nutzungsarten existieren, dass eine Vorabplanung einen Zeitaufwand darstellen würde, der nicht akzeptabel ist, weil z.B. ein Konkurrent in der selben Zeit bereits ein Produkt fertig am Markt platziert hätte. Auch ergeben sich während der Umsetzung oft neue Erkenntnisse und Ideen für weitere Features, die so vorab einfach niemandem in den Sinn kamen.
Bei der Anwendungserstellung auf Projektbasis für einen Auftraggeber ist dies ähnlich: dieser hat oft gar nicht das Wissen, jedes Detail vorab beantworten zu können. Die Fragen bei der Umsetzung bringen wichtige offene Punkte ans Tageslicht, die die Ausprägung der gewünschten Applikation markant beeinflussen.
Die modernen agilen Vorgehensweisen sind genau für diese Art von Entwicklungsprojekten ersonnen worden. Sie sind für komplexe Umgebungen gemacht. Agile Methoden in nicht komplexen Aufgabenstellungen einzusetzen, kann dennoch nützlich sein, geht aber tendenziell am Ziel vorbei. Wer agile Vorgehensmodelle einsetzt um z.B. die Effizienz zu steigern, hat dies nicht verstanden und/oder wurde falsch beraten.