Zum Inhalt springen

Blogeintrag

Effizienz als Vermeidung von Verschwendung

Consulting  Management & Organisation 

Die Effizienz in der SW-Entwicklung zu steigern ist eines der großen Ziele in vielen Unternehmen. Die Entwickler sollen möglichst effizient arbeiten. Aber was heißt Effizienz eigentlich?

Effizienz wird im Projektmanagement oft als Verhältnis von eingesetzten Mitteln zu erzieltem Out-put gesehen. Also Aufwand im Verhältnis zu erstellter Software. In [1] wird Effizienz beispielsweise definiert als „mögliches Unterziel der Effektivität [und] stellt eine Relation von Input und Output dar und kann als Maßstab für die Ressourcenwirtschaftlichkeit dienen“. Output könnte zum Beispiel in Function Points, Story Points oder Lines of Code gemessen werden. Input wird meist in Personentagen angegeben.  Insgesamt unterscheidet sich „Effizienz“ nach dieser Definition jedoch nicht vom Begriff der „Produktivität“, welche genauso als Verhältnis von Input zu Output definiert wird. Auch wird nur auf den Output im Sinne der gelieferten Softwarefunktionen abgestellt, viele weitere wichtige Dimensionen in Softwareprojekten, wie Termin, Kundenzufriedenheit, Budget etc. werden nicht berücksichtigt.

Die Algorithmenlehre in der Informatik definiert Effizienz etwas anders: „Die Effizienz eines Algorithmus ist seine Sparsamkeit bezüglich der Ressourcen, Rechenzeit und Speicherplatz, die er zur Lösung eines festgelegten Problems beansprucht“ [3]. In dieser Definition wird also nicht auf das bloße Verhältnis von Input zu Output abgestellt, sondern auf den sparsamen Umgang mit Ressourcen bei der Ausführung eines Algorithmus. Sieht man einen Entwicklungsprozess ebenfalls als „eindeutige Handlungsvorschrift für die Lösung eines Problems“ [4], dann kann man die Sicht auf Effizienz auch auf Software-Entwicklungsvorhaben übertragen:

„Effizienz eines Entwicklungsprozesses ist seine Sparsamkeit bezüglich des eingesetzten Aufwands zur Erreichung der Vorhabensziele. Effizient arbeiten bedeutet, auf dem Weg zur Zielerreichung Verschwendung zu vermeiden und nichts zu tun, was nicht unbedingt notwendig ist. Gefordert ist also, die gesetzten Ziele eines Vorhabens mit dem minimal möglichen Aufwand zu erreichen oder sich diesem möglichst anzunähern.“

Abbildung 1 verdeutlicht dies: Durch Optimierung streben wir an, jede Form von Verschwendung, z.B. durch Fehler, Redundanzen in der Kommunikation, etc. zu vermeiden und den tatsächlichen Aufwand möglichst nahe an den minimal möglichen Aufwand anzunähern. Effizienz misst, wie gut uns das gelingt.

In Softwarevorhaben müssen mehrere Ziele gleichzeitig effizient erreicht werden

Effizienz bedeutet nach dieser Definition „die Dinge, die getan werden, richtig zu tun“ [1], es ist als Folgeziel der „Effektivität“ nachgelagert. Effektivität bedeutet „die richtigen Dinge zu tun“ [1]. Erst wenn ich sicher bin, die richtigen Dinge zu tun, kann ich mich darum kümmern, sie effizient zu tun. Was aber sind diese „Dinge“? Was sind die Ziele, die wir in Softwarevorhaben effizient verfolgen müssen? Neben dem Output, also Source Code und Doku zu liefern verfolgen wir in Softwarevor-haben eine ganze Reihe weiterer Ziele:

  • Business Value durch geeignete Funktionen
  • Termin, zu dem die SW zur Verfügung steht
  • Budget, das eingehalten werden muss
  • Qualität
  • Tatsächliche Eignung der Software, das Problem des Kunden zu lösen
  • Langfristige Kundenzufriedenheit
  • Wissensaufbau im Team
  • Wiederverwendbarkeit der entwickelten Komponenten für andere Produkte

Effizienz bedeutet, nicht einfach nur den Aufwand zur Lieferung von Funktionen zu minimieren, sondern den Entwicklungsprozess so zu gestalten, dass alle obigen Ziele effizient erreicht werden. Dies erfordert natürlich eine saubere Zieldefinition.

Ziele müssen ausverhandelt werden, entsprechend ändert sich der optimale Prozess mit

In der Praxis ist die Definition der Projektziele leider oft nicht ganz so einfach und geradeaus. Nicht immer sind alle obigen Zieldimensionen von Anfang an klar fixiert und der Aufwand ist die gesuchte und zu minimierende Größe. Oft werden die einzelnen Zielinhalte erst im Laufe des Projektes erarbeitet. Der minimal benötigte Aufwand ändert sich dadurch ständig (siehe Abbildung 2). So kann es z.B. sein, dass im Laufe der Anforderungserhebung der gewünschte Funktionsumfang verändert wird, um einen früheren Termin zu erreichen. Oder das Budget wird erhöht, um durch zusätzliche Mitarbeiter doch noch einige zusätzliche Funktionen in ein Release hineinzubringen. All das hat Auswirkungen auf den optimalen Prozess. Der minimal mögliche Aufwand muss ständig neu ermittelt werden.  Was gestern noch als Verschwendung schien, ist heute schon ein wertvoller Baustein in der Erreichung der Projektziele und umgekehrt.
Abbildung 2 - Ziele und minimal möglicher Aufwand sind ständig im Fluss

Effizient in einem Projekt bedeutet nicht immer auch langfristig effizient im Unternehmen

Wichtig ist es, sich in jedem Projekt der Ziele bewusst zu sein. Ein Teil dieser Ziele kommt dabei aus dem Projekt selbst (Funktionsumfang, Zeit, Budget [2]), ein Teil kommt aber auch aus übergeordneten Interessen der Organisation (Wissensaufbau im Team, Wiederverwendung von Komponenten, langfristige Kundenzufriedenheit, …). Diese zusätzlichen Ziele können im konkreten Projekt den benötigten Aufwand erhöhen, aber langfristig über viele Projekte gesehen zu einer gesteigerten Effizienz z.B. durch mehr Know-how im Team führen. Bei der Planung für hohe Effizienz muss also immer berücksichtigt werden, für welchen Kontext ich effizient sein möchte: Betrachte ich nur ein einzelnes Projekt, so kann ich möglicherweise sehr viele Dinge weglassen. Betrachte ich aber meine langfristige Entwicklungsorganisation, so kommen andere Ziele als die lokalen Projektziele dazu und „effizient“ bedeutet möglicherweise ganz etwas anderes.

4 Grundfragen, die uns helfen, die Effizienz zu steigern

Diese neue Definition von Effizienz als Maß dafür, wie gut wir es schaffen, Verschwendung zu vermeiden und uns dem minimal möglichen Aufwand zur Erreichung der Projektziele anzunähern, können wir nutzen, um unsere Entwicklungsprozesse zu hinterfragen:

  1. Was sind denn eigentlich wirklich die Ziele, die wir in unserem Projekt verfolgen? Welche Ziele kommen von der Gesamtorganisation dazu?
  2. Wie hoch ist der minimal mögliche Aufwand? Wieviel Aufwand brauchen wir selbst unter optimalen Bedingungen mindestens, um diese Ziele erreichen zu können?
  3. Was haben wir an Verschwendung in unseren Prozessen? Was hält uns auf?
  4. Was können wir weglassen? Was können wir verbessern, um effizienter zu werden, also um uns dem minimal möglichen Aufwand anzunähern?

Nutzen Sie diese Fragen, diskutieren Sie sie regelmäßig in ihren Teams, um Schritt für Schritt die Effizienz in der Entwicklung zu erhöhen.

Quellen
[1] www2.hs-esslingen.de/~langeman/BWPC092/pub/Methodenlexikon/methodenlexikon/ methodenlexi-kon/einleitung/definition_effektivi.htm
[2] https://en.wikipedia.org/wiki/Project_management_triangle
[3] https://de.wikipedia.org/wiki/Effizienz_(Informatik)
[4] https://de.wikipedia.org/wiki/Algorithmus

Fachlicher Kontakt

Markus Unterauer

markus.unterauer@software-quality-lab.com

 +43 5 0657-438
 +43 676 840072-438