Software Product Mastering / Das unsichtbare Biest / Das "Was" und das "Wie"
Stacey Matrix¶
Quelle: https://en.wikipedia.org/wiki/Ralph_D._Stacey (9.11.2024)
Definition: Tool zur Einordnung von Projekten nach Klarheit der Anforderungen und Gewissheit der Lösung.

Achsen:
- Anforderungen (What): Von klar bis unklar.
- Lösung (How): Von sicher bis unsicher.
Kategorien:
- Einfach (Simple): Klarheit über Anforderungen und Lösung.
- Vorgehen: Standardisierte Prozesse, Wasserfallmodell.
- Anwendung: Routinelösungen, z. B. Verwaltungssysteme.
- Kompliziert (Complicated): Anforderungen klar, Lösung erfordert Expertise.
- Vorgehen: Experten-Analyse, Scrum, Kanban.
- Anwendung: Neue Features in bestehenden Systemen.
- Komplex (Complex): Anforderungen und Lösung unklar.
- Vorgehen: Agile Methoden, Iterationen, Feedback.
- Anwendung: Innovative Produkte, z. B. neue Apps.
- Chaotisch (Chaos): Anforderungen und Lösung völlig unklar.
- Vorgehen: Kleine Experimente, Fail-fast.
- Anwendung: Bahnbrechende Technologien, hohe Unsicherheit.
- Einfach (Simple): Klarheit über Anforderungen und Lösung.
Nochmal zum Nachlesen...
Die Stacey Matrix ist ein Management- und Entscheidungstool, das komplexe Probleme und Unsicherheiten visualisiert und aufzeigt, wie unterschiedliche Management- und Herangehensweisen zu verschiedenen Arten von Problemen passen. Entwickelt wurde sie von Ralph Stacey, einem britischen Professor für Management, um Organisationen zu helfen, ihre Projekte und Entscheidungen besser einzuordnen und geeignete Ansätze auszuwählen. Die Matrix ist besonders nützlich in Bereichen wie der Softwareentwicklung, wo Unsicherheiten in Anforderungen und technischen Lösungen häufig vorkommen.
Aufbau der Stacey Matrix¶
Die Stacey Matrix visualisiert Problemfelder entlang zweier Achsen:
- Grad der Klarheit der Anforderungen (What): Reicht von „Klarheit“ bis „Unklarheit“.
- Grad der Gewissheit über die Lösung (How): Reicht von „Sicher“ bis „Unsicher“.
Diese beiden Dimensionen bilden ein Koordinatensystem, das in vier grundlegende Kategorien unterteilt ist:
- Einfach (Simple): Klarheit über die Anforderungen und die Lösung. Vorgehensweise und Resultat sind vorhersehbar und leicht zu managen.
- Kompliziert (Complicated): Anforderungen sind klar, aber die Lösung ist schwieriger und erfordert mehr Fachwissen oder Analyse. Experten können durch Analysen Lösungen finden.
- Komplex (Complex): Sowohl die Anforderungen als auch die Lösung sind unsicher. Die Projekteigenschaften ändern sich dynamisch und sind oft schwer zu prognostizieren. Häufig wird iteratives und exploratives Arbeiten benötigt.
- Chaotisch (Chaos): Sowohl Anforderungen als auch die Lösung sind völlig unklar. Es gibt keine klare Richtung, und ein strukturiertes Vorgehen ist kaum möglich. Hier wird experimentelles Arbeiten empfohlen, bis sich eine Richtung ergibt.
Zusätzlich gibt es noch den Bereich des Ungewissen oder Zonen der Anarchie („Zone of Anarchy“) am äußeren Rand, wo Projekte außerhalb sinnvoller Entscheidungsgrundlagen liegen.
Anwendung auf Softwareprodukte und deren Entwicklung¶
Die Stacey Matrix hat für Softwareprodukte erhebliche Auswirkungen, da Softwareentwicklungsprojekte oft von Unsicherheiten geprägt sind. Dies gilt insbesondere für Produkte, bei denen Anforderungen und technische Lösungen noch nicht ausgereift sind, sich dynamisch verändern oder Neuland betreten wird. Folgende Auswirkungen können je nach Position innerhalb der Matrix entstehen:
1. Einfach (Simple)¶
- Merkmale: Anforderungen sind stabil und klar definiert; technische Lösung ist bekannt und bewährt.
- Vorgehen: Projekte in diesem Bereich können leicht durch standardisierte Prozesse, wie Wasserfallmodelle oder stark strukturierte agile Prozesse, abgewickelt werden.
- Auswirkung auf Softwareprodukte: Optimale Planung und Strukturierung möglich; geringe bis keine Iterationen nötig. Ideal für Software mit wiederkehrenden Funktionen, z. B. interne Verwaltungssysteme oder Prozessautomatisierungen, bei denen nur wenig Innovation erforderlich ist.
2. Kompliziert (Complicated)¶
- Merkmale: Anforderungen sind klar, die Lösung erfordert jedoch spezielle technische Expertise.
- Vorgehen: Hier eignet sich ein analytisches Vorgehen mit Expertenteams oder gezielte iterative Methoden. Frameworks wie Scrum oder Kanban können genutzt werden, wobei technische Experten eine große Rolle spielen.
- Auswirkung auf Softwareprodukte: Der Einsatz von Fachwissen minimiert Risiken. Produkte in diesem Bereich erfordern möglicherweise neue Funktionen oder technische Anpassungen, die komplex, aber nicht unlösbar sind. Beispiele wären neue Features in einer bestehenden Anwendung, die nur von einem spezialisierten Team umgesetzt werden können.
3. Komplex (Complex)¶
- Merkmale: Anforderungen und technische Lösung sind unklar; Feedback und iteratives Lernen sind entscheidend.
- Vorgehen: Agile Methoden wie Scrum oder Lean Development sind besonders effektiv. Häufige Iterationen und Feedback-Loops sind entscheidend, um Lösungen zu validieren und Anforderungen dynamisch anzupassen.
- Auswirkung auf Softwareprodukte: Hohe Anpassungsfähigkeit und Flexibilität notwendig. Produkte in diesem Bereich sind oft innovativ, wie neue Apps, Plattformen oder digitale Services, die kontinuierlich auf Markt- und Kundenfeedback reagieren müssen. Teams arbeiten empirisch, führen Experimente durch und passen die Lösung schrittweise an. Agile Prinzipien bieten eine gute Möglichkeit, den ständigen Wandel zu managen.
4. Chaotisch (Chaos)¶
- Merkmale: Es gibt weder Klarheit über Anforderungen noch über die technische Lösung.
- Vorgehen: In dieser Zone ist es oft am besten, kleine Experimente durchzuführen, um Orientierung zu gewinnen. Ein Fail-fast-Ansatz kann sinnvoll sein, um schnell herauszufinden, was funktioniert und was nicht.
- Auswirkung auf Softwareprodukte: Bei Softwareprodukten in dieser Zone kann es sich um bahnbrechende, radikal neue Technologien handeln, deren Marktpotenzial und technische Umsetzung unklar sind. Solche Projekte sollten möglichst risikominimierend durchgeführt werden, indem Experimente und Tests frühzeitig validiert werden. Projekte könnten schnell eingestellt oder drastisch umstrukturiert werden, wenn sich eine Richtung als unbrauchbar erweist.
Fazit¶
Die Stacey Matrix ist ein wertvolles Tool, um die richtige Projekt- und Produktstrategie in der Softwareentwicklung zu bestimmen. Indem sie hilft, Komplexität und Unsicherheit zu identifizieren, ermöglicht sie es, die Herangehensweise anzupassen und Ressourcen optimal einzusetzen. Für Softwareentwickler und Projektmanager ist die Matrix eine nützliche Orientierungshilfe, um zu entscheiden, wann standardisierte Prozesse und wann exploratives, iteratives Arbeiten erforderlich ist.
Stacey Matrix spielerisch erleben¶
Ein interaktives Programm in einem Jupyter Notebook könnte die Stacey Matrix auf spielerische Weise vermitteln, indem es den Benutzer dazu auffordert, verschiedene Szenarien in Bezug auf Anforderungs- und Lösungsunsicherheit zu bewerten. Abhängig von den Antworten des Benutzers wird das Projekt in eine Kategorie der Matrix eingeordnet und eine geeignete Vorgehensweise vorgeschlagen.
Hier ein Beispiel:
import ipywidgets as widgets
from IPython.display import display, clear_output
# Labels für Anforderungen und Lösungssicherheit
anforderungen_label = widgets.Label("Anforderungen:")
loesung_label = widgets.Label("Lösungssicherheit:")
# Dropdown-Widgets für Anforderungen und Lösungssicherheit ohne Beschreibung, dafür breiter
anforderungen_dropdown = widgets.Dropdown(
options=["Klar", "Unklar", "Sehr unklar"],
layout=widgets.Layout(width='300px')
)
loesung_dropdown = widgets.Dropdown(
options=["Sicher", "Unsicher", "Sehr unsicher"],
layout=widgets.Layout(width='300px')
)
# Button-Widget zur Bestätigung
button = widgets.Button(description="Analyse durchführen", layout=widgets.Layout(width='200px'))
# Ausgabe-Widget
output = widgets.Output()
# Funktion zur Analyse basierend auf der Stacey Matrix
def analyze_project(button):
with output:
clear_output()
anforderungen = anforderungen_dropdown.value.lower()
loesung = loesung_dropdown.value.lower()
if anforderungen == "klar" and loesung == "sicher":
result = "Einfach (Simple) - Standardprozess wie Wasserfallmodell geeignet."
elif anforderungen == "klar" and loesung == "unsicher":
result = "Kompliziert (Complicated) - Experten-Analyse oder Kanban geeignet."
elif anforderungen == "unklar" and loesung == "unsicher":
result = "Komplex (Complex) - Agile Methoden, Scrum oder Lean Development empfohlen."
elif anforderungen == "sehr unklar" or loesung == "sehr unsicher":
result = "Chaotisch (Chaos) - Experimentieren und fail-fast-Ansatz empfohlen."
else:
result = "Zone der Anarchie - Experimentieren und Risikomanagement notwendig."
print("Empfohlener Ansatz:", result)
# Button mit der Funktion verknüpfen
button.on_click(analyze_project)
# Widgets und Ausgabe anzeigen
display(anforderungen_label, anforderungen_dropdown)
display(loesung_label, loesung_dropdown)
display(button)
display(output)
Label(value='Anforderungen:')
Dropdown(layout=Layout(width='300px'), options=('Klar', 'Unklar', 'Sehr unklar'), value='Klar')
Label(value='Lösungssicherheit:')
Dropdown(layout=Layout(width='300px'), options=('Sicher', 'Unsicher', 'Sehr unsicher'), value='Sicher')
Button(description='Analyse durchführen', layout=Layout(width='200px'), style=ButtonStyle())
Output()
Erläuterung des Codes¶
- Dropdown-Menüs: Die Dropdowns
anforderungen_dropdown
undloesung_dropdown
lassen den Benutzer die Anforderungen und Lösungssicherheit auswählen. - Button-Widget: Der Button „Analyse durchführen“ startet die Analyse.
- Funktion
analyze_project
: Diese Funktion liest die Auswahl, führt die Entscheidung basierend auf der Stacey Matrix durch und gibt die Empfehlung imoutput
-Widget aus. - Anzeige: Alle Widgets und das Ausgabe-Widget werden am Ende mit
display
zusammen angezeigt.