Software Product Mastering / Zusammenfassung Theorie / Agile Werte / Fehlerkultur / Management Stile / Produkt & Projekt / Methoden
Scrum¶
Scrum ist ein agiles Framework, das Teams hilft, komplexe Probleme zu lösen und in kurzen Iterationen (Sprints) funktionsfähige Produkte zu liefern. Es basiert auf klar definierten Rollen, Ereignissen und Artefakten. Hier ist ein Überblick, wie Scrum abläuft, welche Rolle wann was macht und wie Meetings organisiert sind.
Rollen in Scrum¶
Product Owner (PO)
- Verantwortung: Maximierung des Produktwerts.
- Aufgaben:
- Priorisierung des Product Backlogs.
- Klärung von Anforderungen.
- Stakeholder-Management.
- Beispiele:
- Entscheidung, ob eine neue Funktion wichtiger ist als technische Schulden.
- Definition der Akzeptanzkriterien für User Stories.
Scrum Master (SM)
- Verantwortung: Sicherstellen, dass Scrum korrekt umgesetzt wird.
- Aufgaben:
- Moderation der Meetings.
- Beseitigung von Hindernissen (Impediments).
- Coaching des Teams.
- Beispiele:
- Klären von Blockaden wie fehlendem Zugang zu einem Testsystem.
- Helfen, Konflikte im Team zu moderieren.
Entwicklungsteam (DEV)
- Verantwortung: Entwicklung eines funktionsfähigen Produkts.
- Aufgaben:
- Planung und Umsetzung von Inkrementen.
- Selbstorganisation.
- Beispiele:
- Implementierung eines neuen Features.
- Schreiben von Unit-Tests.
Ablauf eines Sprints¶
Sprint Planning (Start jedes Sprints)
- Ziel: Festlegen, was im Sprint erreicht wird und wie.
- Dauer: Maximal 8 Stunden für einen 4-Wochen-Sprint.
- Teilnehmer: PO, SM, DEV.
- Agenda:
- PO: Stellt die priorisierten Backlog-Einträge vor.
- DEV: Diskutiert und schätzt den Aufwand. Erarbeitet den Sprint Backlog.
- Beispiel:
- PO stellt eine Story „Benutzer können Produkte in den Warenkorb legen“ vor.
- DEV schätzt 13 Story Points und plant, welche Tasks nötig sind.
Daily Scrum (täglich während des Sprints)
- Ziel: Synchronisation des Teams.
- Dauer: Maximal 15 Minuten.
- Teilnehmer: DEV (SM moderiert oft).
- Agenda:
- Jeder beantwortet:
- Was habe ich gestern getan?
- Was werde ich heute tun?
- Gibt es Hindernisse?
- Beispiel:
- Entwickler A: „Gestern habe ich die Login-Logik fertiggestellt.“
- Entwickler B: „Ich brauche Klärung zu API-Spezifikationen.“
- Jeder beantwortet:
Sprint Review (Ende des Sprints)
- Ziel: Präsentation und Feedback für das Inkrement.
- Dauer: Maximal 4 Stunden für einen 4-Wochen-Sprint.
- Teilnehmer: PO, SM, DEV, Stakeholder.
- Agenda:
- DEV: Demonstriert fertige Funktionalität.
- Stakeholder: Geben Feedback.
- PO: Entscheidet über Anpassungen im Backlog.
- Beispiel:
- Entwickler zeigt die „Warenkorb“-Funktion live.
- Stakeholder schlägt vor: „Können wir die Designfarben ändern?“
Sprint Retrospective (Ende des Sprints)
- Ziel: Kontinuierliche Verbesserung des Prozesses.
- Dauer: Maximal 3 Stunden für einen 4-Wochen-Sprint.
- Teilnehmer: PO (optional), SM, DEV.
- Agenda:
- SM moderiert:
- Was lief gut?
- Was kann verbessert werden?
- Was nehmen wir uns für den nächsten Sprint vor?
- Beispiel:
- Team merkt, dass zu viele Tasks parallel bearbeitet wurden und beschließt, dies zu ändern.
- SM moderiert:
Scrum Meetings und Governance-Themen¶
Wo sollten Governance-Themen wie Sprint-Länge besprochen werden?¶
Initiale Governance-Entscheidungen
- Sprint-Länge (z. B. 2 Wochen vs. 4 Wochen), Definition of Done, und andere grundlegende Entscheidungen sollten vor der ersten Iteration in einem Kickoff-Meeting festgelegt werden.
Laufende Anpassung
- Retrospective:
- Hier wird die Sprint-Länge überprüft, wenn das Team Probleme sieht (z. B. zu kurze Sprints für komplexe Aufgaben).
- Beispiel: Das Team bemerkt, dass es immer wieder unvollständige Stories gibt. Sie diskutieren, ob eine Sprint-Länge von 3 Wochen sinnvoller wäre.
- Retrospective:
Wie man andere Governance-Themen einbindet:¶
- Definition of Ready (Wann ist eine Story bereit für das Team?):
- Diskutiert während des Sprint Planning.
- Beispiel: „Stories müssen Akzeptanzkriterien enthalten und vom PO priorisiert sein.“
- Work in Progress (WIP)-Limits:
- Kann in der Retrospective angepasst werden.
- Beispiel: „Wir reduzieren parallele Arbeiten auf maximal 3 Storys.“
Quiz zu Scrum¶
In [1]:
import ipywidgets as widgets
from IPython.display import display, clear_output
# Fragen und Antworten
questions = [
{
"question": "Wann wird entschieden, welche Stories im Sprint bearbeitet werden?",
"options": ["Im Daily Scrum", "Im Sprint Planning", "In der Sprint Retrospective"],
"answer": "Im Sprint Planning",
},
{
"question": "Welche Rolle moderiert die Retrospective?",
"options": ["Product Owner", "Scrum Master", "Entwicklungsteam"],
"answer": "Scrum Master",
},
{
"question": "Wann sollte Feedback von Stakeholdern eingeholt werden?",
"options": ["Im Sprint Review", "Im Sprint Planning", "Im Daily Scrum"],
"answer": "Im Sprint Review",
},
{
"question": "Wer ist verantwortlich für die Priorisierung des Product Backlogs?",
"options": ["Scrum Master", "Product Owner", "Entwicklungsteam"],
"answer": "Product Owner",
},
{
"question": "Wann wird besprochen, was gut und schlecht gelaufen ist?",
"options": ["Im Sprint Planning", "In der Sprint Retrospective", "Im Daily Scrum"],
"answer": "In der Sprint Retrospective",
},
]
# Quiz-Funktion
def quiz_game():
score = 0
for idx, q in enumerate(questions):
clear_output(wait=True)
# Frage anzeigen
print(f"Frage {idx + 1}: {q['question']}")
# Optionen anzeigen
buttons = []
for option in q["options"]:
button = widgets.Button(description=option)
# Callback-Funktion
def on_click(change, option=option):
nonlocal score
if option == q["answer"]:
print("\n✅ Richtig!")
score += 1
else:
print(f"\n❌ Falsch! Die richtige Antwort ist: {q['answer']}")
# Weiter zur nächsten Frage
input("Drücke Enter, um fortzufahren...")
quiz_game() # Startet die nächste Frage
button.on_click(on_click)
buttons.append(button)
# Buttons anzeigen
display(widgets.VBox(buttons))
return # Pausiert, bis ein Button geklickt wird
# Quiz beenden
clear_output(wait=True)
print(f"🎉 Quiz abgeschlossen! Dein Ergebnis: {score}/{len(questions)} Punkten.")
# Quiz starten
quiz_game()
Frage 1: Wann wird entschieden, welche Stories im Sprint bearbeitet werden?
VBox(children=(Button(description='Im Daily Scrum', style=ButtonStyle()), Button(description='Im Sprint Planni…