Du bist hier:Start»Wissen»Lessons Learned

Lessons Learned

Lessons Learned - auf Deutsch "gewonnene Erkenntnisse", Erfahrungen aus der Software-Entwicklung.

Organisation

Scrum

  • bei der Einführung von Scrum in einer Organisation können viele Fehler gemacht werden
  • nach meiner Erfahrung gibt es aber ein Hauptproblem:
  • wenn Manager Scrum nicht verstehen, dann kann man die Einführung von Scrum in einer Organisation vergessen
    • manche Menschen sind der Meinung, dass sich Teams "selbst" zu Scrum-Teams zusammenfinden könnten
    • wenn Mitarbeiter aber Scrum noch nicht kennen oder verstehen, dann kann es passieren, dass keine Scrum-Teams "von selbst" dabei herauskommen
    • wenn es schlecht läuft, hat man Wasserfall-Teams, in denen nur Entwickler oder nur Tester sind und keine cross-funktionalen Teams
    • hier muss ein Manager eingreifen
    • theoretisch könnte ein "Scrum Master" oder "Agile Coach" eingreifen
    • wenn sich jemand aber lediglich als "Scrum Master" bezeichnet und wenig Ahnung hat, dann bleibt nur der Manager
    • Manager sind schließlich auch dafür verantwortlich, ob und wie die Rollen "Scrum Master" und "Product Owner" besetzt werden
  • bei misslungener Einführung von Scrum, kann es passieren, dass ein Scherbenhaufen hinterlassen wird
  • Mitarbeiter geben dann Scrum die Schuld, anstatt der misslungenen Umsetzung

Feedback

  • Manager sollten regelmäßiges Feedback durch Mitarbeiter ermöglichen

Flache Hierarchien

  • flache Hierarchien können dazu führen, dass Manager weder zeitlich noch inhaltlich auf Feedback von Mitarbeitern reagieren können
  • dadurch berichten Mitarbeiter unter Umständen nicht mehr Probleme, die nur ein Manager lösen kann
  • Probleme können über Jahre liegen bleiben und sich aufstauen
  • bei flachen Hierarchien kann es zu Verantwortungsdiffusion kommen
  • das kann natürlich auch bei klassischen Hierarchien mit unfähigen Vorgesetzten passieren

Standortübergreifende Arbeit

  • standortübergreifende Arbeit ist generell problematisch, da die Kommunikation eingeschränkter ist als vor Ort
  • Missverständnisse können zu Spannungen im Team führen
  • wenn noch eine Sprachbarriere durch länderübergreifende Arbeit dazukommt, wird es noch schwieriger
  • wenn eine Einzelperson an einem Standort mit einem Team von einem anderen Standort zusammenarbeitet, kann es langfristig zu Motivationsproblemen führen
  • Arbeit hat auch immer eine soziale Komponente
  • wenn Arbeit an mehreren Standorten, dann lieber komplett getrennte Teams mit klar definierten Schnittstellen
  • wenn trotzdem standortübergreifende Arbeit nötig sein sollte, dann sollten zumindest gelegentliche Teambuilding-Maßnahmen durchgeführt werden

Know-How

  • gerade in Software-Projekten ist Knowhow ein entscheidender Faktor für Zeit und Kosten
  • Vorgesetzte oder Product Owner sollten darauf achten, dass Knowhow auch dokumentiert wird
  • im Idealfall gehört die Know-How-Dokumentation zur Definition of Done einer User Story
  • natürlich hat schriftliche Dokumentation auch ihre Grenzen
  • deshalb ist Know-How Verteilung im Team wichtig
  • entsprechend sollte ein Team z.B. aus 2 Entwicklern und 2 Testern zusammengesetzt sein
  • so kann z.B. technisches Know-How innerhalb der Tester oder Anwendungs-Know-How übergreifend zwischen Entwicklern und Testern ausgetauscht werden
  • oder z.B. eine erfahrene und eine unerfahrene Person zusammenarbeiten

Abhängigkeiten reduzieren

  • es ist wichtig, Abhängigkeiten zwischen Teams zu reduzieren
  • klassisches Beispiel: Entwickler einer Testumgebung und Tester, die die Testumgebung benutzen sollen
  • ein Tester sollte Zugriff auf den Quellcode der Testumgebung haben und selbst Änderungen vornehmen können
  • Testumgebungsentwickler sollten auch selbst Testfälle der Tester ausführen können

Teams

  • wie bereits bei den oberen Punkten "Scrum" und "Know-How" geschrieben, sind cross-funktionale Teams mit erfahrenen und unerfahrenen Leuten wichtig
  • nur unerfahrene Leute in einem Team sind keine gute Voraussetzung für ein erfolgreiches Projekt
  • wenn auch noch der Manager keine Ahnung von Software-Entwicklung hat, wird es sehr schwierig
  • damit ist gemeint, dass z.B. grundlegende Schritte im Software-Entwicklung-Prozess nicht eingehalten werden, wie z.B. Unit-Tests, Coverage-Tests, Memory-Leak-Tests, Systemtests, Fehlerbehandlung, ...
  • außerdem sollten sowohl Tester als auch Entwickler in einem Team an derselben User-Story arbeiten
  • es macht wenig Sinn, wenn Entwickler an einer User-Story arbeiten und Tester an einer anderen User-Story

Software

  • Log-Daten immer auf einem zusätzlichen Computer speichern
    • keine zeitkritische Software auf einem Log-Computer laufen lassen
    • ansonsten könnte die Festplatten-Aktivität die zeitkritische Software blockieren
  • Mutex (mutual exclusion) unlock führt nicht zu einem Threadwechsel
    • nach Mutex unlock kann lediglich der Mutex wieder gelockt werden
    • es muss kein Threadwechsel stattfinden, der Mutex kann auch vom gleichen Thread wieder gelockt werden
    • dieses Verhalten kann dazu führen, dass immer nur ein Thread aktiv ist und andere Threads, die auf den Mutex warten, blockiert sind
    • bei einigen Betriebssystemen kann man einen Threadwechsel durch den Aufruf von sched_yield() oder usleep(1) erzwingen
  • Software-Architektur
    • am Anfang eines Projekts einen Überblick verschaffen
    • etwas mehr Zeit nehmen, um zu schauen, ob man Software wiederverwenden kann
    • bei der Architektur überlegen: wie kann man ein Projekt möglichst effizient umsetzen

Letzte Änderung: 2024-08-24

Kommentar schreiben

Ihre Daten werden verschlüsselt übertragen. Der Kommentar wird gelesen und eventuell veröffentlicht.
Wenn der Inhalt des Kommentars oder Teile des Kommentars nicht veröffentlicht werden, dann werden die gespeicherten Daten nach maximal 4 Wochen gelöscht. Um zukünftigen Missbrauch der Kommentarfunktion zu verhindern, werden die zum Kommentar gehörenden IP Adressen maximal 4 Wochen gespeichert.