Wenn Sie die Entwicklung eines Softwareprodukts leiten mussten, haben Sie sich wahrscheinlich gefragt, wie Sie dem Team helfen können, schneller voranzukommen. Und woher weißt du, wie schnell du dich bewegst?
Es erscheint logisch, Metriken zu verwenden, um solche Fragen zu beantworten. Immerhin setzen wir sie schon lange und erfolgreich für die Softwareprodukte selbst ein. Es gibt Leistungsmetriken, Auslastung der Produktionsserver und Verfügbarkeit. Es gibt auch Produktmetriken, die auf dem Benutzerverhalten basieren, z. B. Konvertierung und Aufbewahrung. Der Vorteil von Metriken besteht nicht nur in einem klareren Verständnis des aktuellen Zustands, sondern vor allem in der Bereitstellung von Feedback. Sie nehmen eine Änderung vor, die etwas verbessern soll, und Sie können anhand der Metriken sehen, wie viel Verbesserung (oder Verschlechterung) Sie erhalten. Die weit verbreitete Programmierweisheit besagt, dass jede Optimierung der Programmleistung mit der Messung beginnen sollte, und das ist sehr sinnvoll.
Da wir Metriken erfolgreich auf die Softwareprodukte selbst anwenden können, können Sie sie auf die Entwicklungsgeschwindigkeit dieser Produkte anwenden. In diesem Fall könnten wir einige Verbesserungen in den Prozessen versuchen und visuell prüfen, ob sie dazu beitragen, schneller voranzukommen. Und das Problem der Festlegung eines fairen Gehalts für Programmierer würde ebenfalls vereinfacht. Welche Metriken könnten Sie verwenden?
Wir haben keine guten Metriken dafür.
Die Entwicklungsgeschwindigkeit ist der Arbeitsaufwand pro Zeiteinheit. Wir können die Zeit messen, hier ist alles einfach. Aber wie misst man den Arbeitsaufwand? Versuche, dies zu tun, begannen vor vielen Jahrzehnten mit der Geburt der Programmierindustrie selbst. Jedes Mal, wenn der Indikator als Ziel für Verbesserungen verwendet wurde, musste jedoch etwas schief gehen. Zum Beispiel:
- . , , , . , , , ;
- . , , ;
- . . , , . , , ;
- . , . , , , ;
- . , , , — , ;
- … .
Entwickler sind schlagfertig und kreativ und auf die Lösung komplexer Probleme spezialisiert. Unabhängig davon, welche Metrik Sie ihnen geben, werden sie den einfachsten Weg finden, ihre Leistung zu verbessern, aber höchstwahrscheinlich hat dies nichts mit dem tatsächlichen Umfang und der Qualität der geleisteten Arbeit zu tun. Werden sie diese "Betrugs" -Methoden anwenden? Nicht unbedingt, es hängt von Ihrer speziellen Situation ab, einschließlich der Stärke des Anreizes, den Sie schaffen. Aber sie werden mit Sicherheit erkennen, dass die Bewertung ihrer Produktivität wenig mit Wert zu tun hat. Dies demotiviert nicht nur, sondern lenkt auch von der eigentlichen Arbeit ab.
Aber warum?
Warum eignen sich Metriken hervorragend zur Verbesserung der Eigenschaften von Softwareprodukten, nicht jedoch zur Messung der von Programmierern geleisteten Arbeit? Vielleicht ist das eine Art Verschwörung von Programmierern? Wenn wir über die Softwareentwicklung hinausblicken, werden wir andere Beispiele sehen, in denen einige Metriken gut funktionieren und in anderen nicht.
Beispiele dafür, wo Metriken gut funktionieren, sind Massenfertigung oder Vertrieb. Lassen Sie es Produktion und Verkauf von Bechern geben. Sie können das Produktionsvolumen messen - die Anzahl der Tassen pro Zeiteinheit, die Qualität (Schrottprozentsatz), die Kosten für eine Tasse. Im Umsatz - Verkaufsvolumen, Marge. Diese Metriken werden im Management recht erfolgreich eingesetzt. Beispielsweise kann dem Produktionsleiter die Aufgabe übertragen werden, die Ausschussrate unter Beibehaltung des Selbstkostenpreises zu reduzieren, und dem Vertriebsleiter die Steigerung des Umsatzes unter Beibehaltung des Preises. Verbesserungen dieser Kennzahlen kommen dem Unternehmen zugute, sodass sie als Indikatoren für die Leistung der verantwortlichen Personen angesehen werden können.
Ein Beispiel dafür, wann Metriken nicht funktionieren, ist die Bewertung der wissenschaftlichen Leistung. Wissenschaftler betreiben Forschung, die dann als wissenschaftliche Arbeiten veröffentlicht wird. Dieser Bereich hat auch seine eigenen numerischen Metriken - die Anzahl der Artikel, die Anzahl der Zitate, die statistische Signifikanz der Ergebnisse usw. Kann man sagen, dass ein Wissenschaftler, der 10 wissenschaftliche Artikel veröffentlicht hat, der Welt doppelt so viel Nutzen gebracht hat wie ein Wissenschaftler, der 5 Artikel veröffentlicht hat? Es ist unwahrscheinlich, weil der Wert ihrer Arbeit sehr unterschiedlich sein kann und es gleichzeitig selbst auf subjektiver Ebene schwierig sein kann zu verstehen, welche Arbeit wertvoller war. Das Problem des "Betrügens" von Zitaten und Veröffentlichungen ist in der wissenschaftlichen Gemeinschaft weithin bekannt, weshalb sie leider nicht als verlässliche Wertindikatoren angesehen werden. Es gibt auch das Problem der Manipulation der statistischen Signifikanz .
Zwei Hauptkriterien
Unabhängig vom Kontext haben gut funktionierende Metriken zwei Gemeinsamkeiten:
- Direkte (nicht indirekte) Beziehung zum Wert;
- Die Genauigkeit, dh die Metrik basiert auf der Messung der Anzahl einiger Werteinheiten, und diese Einheiten sind einander gleich.
Schauen wir uns noch einmal die Beispiele an, die wir uns oben angesehen haben: Die
Metriken für Massenproduktion und Verkauf erfüllen beide Kriterien. Bei der Herstellung von Bechern ist der Wert das Produkt - die Becher selbst. Die Verbindung ist direkt, das Unternehmen muss Tassen produzieren. Und da Produktion Masse ist, sind die Werteinheiten (Kreise) gleich. Wenn wir über Verkäufe sprechen, dann sind die Werteinheiten Geld. Der Zweck des Unternehmens ist es, Gewinn zu erzielen, daher ist das Verhältnis zum Wert wiederum direkt. Und da jeder verdiente Dollar einem anderen gleich ist, können wir genaue Metriken erstellen.
Bei der Bewertung wissenschaftlicher Arbeiten können diese Kriterien nicht erfüllt werden. Wir können keine Maßeinheit finden, die den Wert wissenschaftlicher Arbeit direkt bestimmen würde, da alle wissenschaftlichen Arbeiten einzigartig sind. Es kann nicht anders sein, einfach vom Wesen der Wissenschaft auszugehen - neues Wissen zu entdecken. Für einen Wissenschaftler macht es keinen Sinn, eine andere wissenschaftliche Arbeit zu schreiben, die eine andere genau wiederholen würde. Jede wissenschaftliche Arbeit sollte etwas Neues bringen.
Da wir keine Metriken finden können, die den Wert wissenschaftlicher Arbeit direkt messen, bleiben uns nur indirekte Metriken - zum Beispiel die Anzahl der Veröffentlichungen und Zitate. Das Problem bei indirekten Metriken besteht darin, dass sie schlecht mit dem Wert korrelieren und leicht "betrogen" werden können. Wenn Sie eine solche Metrik als Ziel verwenden, schaffen Sie selbst einen Anreiz, sie künstlich aufzuziehen.
Zurück zur Messung der Programmiererproduktivität
Was hatten wir dort? Codezeilen, Anzahl der Commits, Aufgaben, Aufgabenbewertung in Stunden oder Storypoints ... Wenn Sie versuchen, diese Metriken anhand von zwei Hauptkriterien zu überprüfen, werden Sie feststellen, dass keine von ihnen diese erfüllt:
- Es gibt keine direkte Beziehung zum Wert. Wir liefern unseren Kunden keine Codezeilen, Arbeitsstunden oder Storypoints. Den Benutzern ist es egal, wie viele Commits wir gemacht oder wie viele Aufgaben wir geschlossen haben.
- Sie sind nicht genau. Commit to Commit sind unterschiedlich, eine Codezeile ist nicht gleich einer anderen, Aufgaben sind ebenfalls unterschiedlich und Arbeitsstunden und Storypoints werden subjektiv geschätzt, sodass sie sich auch unterscheiden.
Es ist daher nicht verwunderlich, dass keine dieser Metriken funktioniert - sie sind alle indirekt und ungenau.
Warum gibt es keine Metriken, die in direktem Zusammenhang mit dem Wert der Arbeit eines Programmierers stehen? Aus den gleichen Gründen, warum Wissenschaftler sie nicht haben. Programmierer wie Wissenschaftler erschaffen ständig neue Dinge. Sie schreiben nicht immer wieder genau den gleichen Code - das macht keinen Sinn. Zuvor geschriebener Code kann auf unterschiedliche Weise wiederverwendet, in ein separates Modul oder eine separate Bibliothek unterteilt oder im schlimmsten Fall einfach kopiert werden. Daher ist jeder Arbeitstag für Programmierer einzigartig. Selbst wenn sie ähnliche Probleme lösen, lösen sie sie jedes Mal in einem anderen Kontext unter neuen Bedingungen.
Die Arbeit der Programmierer ist eine Stückproduktion, keine Massenproduktion. Sie liefern nicht die gleichen wiederholbaren Ergebnisse, daher gibt es keine Basislinie für die Messung. Metriken, die in der Massenproduktion oder im Verkauf so gut funktionieren, funktionieren hier nicht.
Gibt es nicht etwas Moderneres, das auf Forschung basiert?
Natürlich spricht heute niemand ernsthaft davon, die Arbeit eines Programmierers an Codezeilen zu messen. Es muss einige modernere Metriken geben, die auf Forschung basieren, oder?
Dort sind einige. In ihrem 2018 erschienenen Buch „Accelerate“ zitieren die Autoren die Ergebnisse einer Studie mit 2.000 Organisationen aus verschiedenen Branchen. Die Autoren versuchten herauszufinden, welche Metriken die Leistung messen würden:
Quelle: Nicole Forsgren, Jez Humble und Gene Kim, „Messung der Leistung“ in Accelerate: Die Wissenschaft hinter DevOps: Aufbau und Skalierung leistungsfähiger Technologieorganisationen
Hier sind vier Metriken. Mal sehen, welche mit dem Wert zusammenhängen und genau gemessen werden können:
- . , . , . . . . , , . , . , — ;
- Lead time — , . , , . , , , — ;
- (MTTR) — , , , . . -, . , MTTR . -, , . , — ;
- , . , . , , , . Linux, “ — ”. SaaS- . , — - , , - . , . , — . , — .
Fazit: Keine dieser vier Metriken ist genau und sie haben nicht immer eine klare Beziehung zum Kundennutzen. Gibt es in diesem Fall eine Möglichkeit zum „Betrügen“? Sicher. Liefern Sie so oft wie möglich triviale Änderungen mit geringem Risiko, und alle Metriken mit Ausnahme der Vorlaufzeit werden großartig aussehen.
Was die Vorlaufzeit betrifft - selbst wenn wir die (wichtige) Tatsache, dass sie ungenau ist, weglassen, führt die Betonung darauf, dass die einfachsten Wünsche des Kunden priorisiert werden und alles, was der Kunde eindeutig nicht verlangt hat, in die äußerste Ecke drängt - in der Regel handelt es sich dabei um Refactorings, Tests und nur irgendwelche Verbesserungen, an die er nicht gedacht hatte.
Daher würde ich nicht empfehlen, diese Metriken als Ziele zu verwenden.
Aber vielleicht finden wir neue Metriken?
Natürlich können Sie sagen: „Warten Sie, wenn noch keine geeigneten Metriken gefunden wurden, bedeutet dies nicht, dass es überhaupt keine geben kann! Wir sind kluge Leute, wir werden uns anstrengen und an etwas denken. “ Leider fürchte ich nicht. Es gibt einen fundamentalen Grund, warum es in diesem Bereich keine guten Metriken gibt. Wie wir oben sagten, würden gute zwei Hauptkriterien erfüllen:
- Direkte (nicht indirekte) Beziehung zum Wert;
- Genauigkeit, dh die Metrik basiert auf der Messung der Anzahl einiger Werteinheiten, und diese Einheiten sind einander gleich.
Wir können den direkten Wert nicht genau messen, da alle Ergebnisse der Arbeit von Programmierern unterschiedlich sind und niemals genau dasselbe produzieren. Dies ist eine Stückproduktion für einzigartige, sich nicht wiederholende Aufgaben. Und da sich nichts wiederholt, gibt es auch keine Grundlage für Vergleiche und Messungen. Wir haben nur noch Proxies, aber da sie schlecht wertgebunden und anfällig für Betrug sind, ist das Vertrauen in sie nachteilig.
Können Sie Bereiche verbessern, für die es keine guten Metriken gibt?
Metriken sind großartig, weil sie Feedback geben. Sie nehmen einige Änderungen im Prozess vor und können deutlich sehen, ob sie zu Verbesserungen geführt haben oder nicht. Wenn es keine Metriken gibt, wird das Feedback weniger ausgeprägt und es kann sich sogar so anfühlen, als würden Sie sich blind bewegen. Peter Drucker wird ein berühmtes Sprichwort zugeschrieben:
Sie können nicht steuern, was Sie nicht messen können.
Nur ist das nicht wahr. Laut dem Drucker-Institut hatte Peter Drucker nicht wirklich die Illusion, dass für jede Aktivität eine Metrik gefunden werden könnte, und sagte niemals solche Worte . Nicht alles, was wertvoll ist, kann gemessen werden, und nicht alles, was gemessen werden kann, ist wertvoll.
Die Komplexität mit Metriken bedeutet nicht, dass nichts verbessert werden kann. Einige Unternehmen veröffentlichen Software viel schneller als andere und ohne Qualitätseinbußen. Dies bedeutet, dass es einige signifikante Unterschiede gibt und daher Verbesserungen möglich sein sollten.
Zusammenfassung
Es ist möglich und notwendig, Ihr Softwareprodukt mithilfe von Metriken zu verbessern. Leistung, Auslastung, Verfügbarkeit oder Produktmetriken wie Conversion und Kundenbindung sind Ihre Freunde.
Sie sollten jedoch nicht versuchen, den Entwicklungsprozess mithilfe von Metriken zu beschleunigen, da keine geeigneten Metriken vorhanden sind. Viele Indikatoren in diesem Bereich wurden erfunden, aber leider sind sie alle indirekt oder ungenau und häufiger beide gleichzeitig. Wenn Sie also versuchen, sie als Ziele zu verwenden, wird nur Schaden verursacht.
Aber lassen Sie sich nicht entmutigen - es gibt Hoffnung! Das Fehlen guter Metriken für die Entwicklungsgeschwindigkeit ist traurig, aber das bedeutet nicht, dass Geschwindigkeitsverbesserungen unmöglich sind. Wie ist das möglich. Ja, wir haben nur subjektive qualitative Bewertungen für Feedback. Es gibt jedoch genug davon, um Verbesserungen umzusetzen und zu verstehen, ob sie Auswirkungen haben. Eines der Dinge, die verbessert werden können, ist beispielsweise die Kommunikation zwischen Entwicklern und Management . Der obige Link enthält Beispiele, wie Sie die Kommunikation verbessern können und warum es sich lohnt, sich darauf zu konzentrieren.
Das ist alles, schreibe in die Kommentare, was du denkst. Viel Spaß beim Einsatz, auch freitags.