Wie messe ich die Leistung eines Mitarbeiters (Softwareentwicklers) basierend auf erstellten Fehlern?

Ich versuche, KPI für Mitarbeiter meines Unternehmens zu implementieren. Einer der aufgeführten KPIs ist die Qualität des Codes, gemessen an Fehlern, die von Entwicklern erstellt wurden.

Jetzt ist mein Problem: Ich habe vor, einem Entwickler 40 Punkte (mein Bewertungssystem) zu geben, wenn er/sie fehlerfreien Code erstellt.

Es kann Fehler geben, die schwerer, mittlerer und niedriger Natur sind. Wie bewerte ich meine Entwickler und vergebe Punkte basierend auf der Anzahl der Fehler, die sie erstellen?

Nur aus Neugier, haben Sie als Programmierer, Analyst usw. gearbeitet? Und wurde diese Art der Messung von einem Programmierer, Analysten usw. vorgeschlagen? Vielleicht hilft Ihnen die Einbeziehung der betroffenen Personen bei der Klärung dieser Frage.
Ich schließe mich der Meinung von @woliveirajr an. Dies ist der genaue entgegengesetzte Weg, den Sie gehen sollten.
Stimme beiden zu :)
Diese Idee demonstriert einen völligen Mangel an Verständnis dafür, wie Entwickler ticken und wie der Entwicklungsprozess funktioniert. Ich werde mit einer Schüssel Popcorn an der Seitenlinie sitzen und zusehen, wie es kracht und brennt.
Denken Sie daran, das sind Menschen, mit denen Sie arbeiten. Ich sag bloß'...
Alle Entwickler schreiben fehlerhaften Code. Ein guter Entwickler findet mehr Fehler als ein schlechter Entwickler. Wenn Sie die Leute belohnen, die keine Fehler finden ("fehlerfreier" Code), belohnen Sie nicht Ihre guten Entwickler. Außerdem ist es ja sowieso nicht so, dass wir durch Belohnungen motiviert werden .
Wenn der OP ein Manager ohne Wurzeln als Entwickler oder Analyst ist, empfehle ich ihm / ihr, dass er / sie tatsächlich Informationen von Leuten einholt, die sich auskennen, bevor er sie implementiert.
Das beste Maß für die Codequalität. osnews.com/images/comics/wtfm.jpg
Ich bin zu wütend, um eine vernünftige Antwort zu schreiben. Ich werde weggehen und in ein Kissen schreien.
@zzzzBov: +1. Danke für den Link zu diesem erstaunlichen RSAnimate-Vortrag.
Ein weiterer Punkt ist, dass nicht alle Aufgaben gleich sind. Es ist nicht fair, jemanden, der schwierigen Multithread-Infrastrukturcode ausführt, als jemanden zu beurteilen, der GUI-Elemente durchmischt.
Ich denke, Sie sagen, dass Sie Programmierern bis zu 40 Punkte zuweisen möchten, die von 0 für eine überwältigende Anzahl von Fehlern bis 40 für überhaupt keine Fehler reichen. Einige Leute interpretieren Ihre Beschreibung möglicherweise ganz anders, als dass sie sagen, dass ein Programmierer 40 Punkte verliert, wenn er zum ersten Mal einen Fehler erstellt! Ich stimme den anderen Bedenken zu diesem Ansatz zu, aber wenn Sie bei Ihrer Beschreibung vorsichtig sind, könnten Sie zumindest die wirklich negativen Reaktionen vermeiden, die die Leute haben werden, wenn sie glauben, dass sie an einen Standard gehalten werden, den absolut niemand erfüllen kann.
Ist das ein Witz von einem Programmierer, der vorgibt, ein PM zu sein, der in einem riesigen Konzern arbeitet? Ansonsten ist das die dümmste Frage, die ich seit langem gesehen habe!
Ich wollte die Frage positiv bewerten, nicht weil die Frage gut ist, sondern weil sie "teuflisch" ist und die Antworten von angehenden PMs gelesen werden müssen.
Es ist lustig zu sehen, wie defensiv die Leute (antworten die Entwickler vielleicht? Ich bin ein alter Entwickler ...) werden, wenn ihre Arbeit gemessen werden soll. Ich stimme zu, dass die Anzahl der Fehler möglicherweise nicht die beste Einzelmessung ist, aber ein zu verfolgender Einheiten-KPI kann eine gute Idee sein, um zu überwachen, ob Prozesse überprüft werden müssen. Ein Entwickler, der für das Unternehmen arbeitet, sollte seine "Häkchen" beiseite legen und einsteigen oder für einen anderen, passenderen Job gehen. Wie kommt es, dass Entwickler damit davonkommen, völlig egozentrisch zu sein?
@Aksen - Ich glaube nicht, dass sich jemand gegen die Notwendigkeit verteidigt, Fehler in einer Entwicklung zu überwachen, aber der Op spricht nicht darüber. Er spricht davon, einen einzelnen Entwickler basierend auf den Fehlern zu bestrafen, die ihm/ihr angelastet werden können. Das ist unsolide, unfair und nicht durchführbar. Natürlich ist die Protokollverfolgung wichtig, ebenso wie die Überwachung einzelner Personen eines Teams, aber die beiden können nicht auf die gleiche Weise überwacht werden. Das liegt nicht daran, dass sie egozentrisch sind, sondern weil sie sehen können, dass eine Schuldzuweisungskultur nur dazu dient, Schaden anzurichten und überhaupt nichts zu nützen. Wenn der Typ an einer Autoproduktionslinie arbeitet
@zzzzBov Falsch. Ich kann einen fehlerfreien Code schreiben, wenn Sie mich die ganze Zeit lassen, die ich entwickeln will. Arf... Manager...
@Asken: nicht gerade jeder ist defensiv wie "meinen Job nicht messen". In vielen Kommentaren und Antworten geht es um „Seien Sie vorsichtig und messen Sie nichts, was Sie nicht wissen, denn Sie könnten Ihre Entwicklerstimmung ruinieren/senken“
@DranDane, wenn Sie so viel Zeit haben, wie Sie möchten, verbringen Sie den größten Teil dieser Zeit damit, die Fehler zu beheben, die Sie während der frühen Iterationen der Programmierung geschrieben haben.
@Asken: Fehler sind nur gelegentlich das Ergebnis der Inkompetenz eines einzelnen Entwicklers. Sie sind häufiger das Ergebnis der Bemühungen einer ganzen Gruppe (inkompetent oder nicht). Der Fehler wird jedoch immer einer einzelnen Person zugeordnet, zu Recht oder zu Unrecht. Zweitens liegt die eigentliche Ursache des Problems möglicherweise überhaupt nicht bei den Entwicklern, sondern im Entwicklungsprozess, an dem sie arbeiten. AKA schnell, gut, billig: Wählen Sie zwei ( en.wikipedia.org/wiki/Project_management_triangle ).
Ich denke, hier wurde ein gewisser Punkt übersehen. Obwohl ich verstehe, dass das, was das OP vorgeschlagen hat, für uns als Programmierer abscheulich ist, bedeutet das nicht, dass wir uns über sie lustig machen sollten. Wenn überhaupt, verstärken die Kommentare, die ich gesehen habe, mehrere gängige Stereotypen, die viele PMs über Programmierer haben. Anstatt das Plakat zu verspotten, warum versuchen wir nicht, einen Beitrag zu leisten und sie in die richtige Richtung zu lenken. Obwohl ich die Frustration aller verstehe (und nachvollziehen kann), denke ich, dass solche Kommentare der Community als Ganzes einen Bärendienst erweisen. </rant>
Ich habe nicht alle gesagt und nicht zugestimmt, dass die Maßnahme gut ist, aber Entwickler sind meistens ziemlich defensiv, wenn es darum geht, dass Unternehmen in die persönliche Freiheit eindringen, die KPIs und die Messung der Arbeit erzwingt.
WARUM, WARUM OH GOTT WARUM? (Das werden SIE bei den Bewertungen sagen, wenn dieses System eingeführt wird :)

Antworten (25)

Bitte seien Sie vorsichtig, wenn Sie diese Art von Messungen als KPIs verwenden.

Wenn Sie dies tun, prognostiziere ich Folgendes:

  • Argumente darüber, ob Fehler durch die Entwicklung oder durch qualitativ schlechte Analysen verursacht werden
  • Argumente darüber, welche Entwickler welche Fehler verursacht haben
  • defensive Programmierung, die die Wartungskosten erhöht
  • Entwickler werden langsamer (kein Code bedeutet keine Fehler!)
  • ein Mangel an Zusammenarbeit zwischen den Entwicklern
  • und der Beginn einer Schuldzuweisungskultur, falls Sie noch keine haben.

Dieser Artikel von Esther Derby schlägt Alternativen zur Verwendung von KPIs in Gehaltsüberprüfungen vor. Es gibt immer mehr Beweise dafür, dass die Verwendung von Leistung als Maß für die Bezahlung destruktiv ist. Meine Erfahrung ist sicherlich, dass es eher Heldentum und eine Schuldzuweisungskultur als Teamarbeit fördert, insbesondere wenn die KPIs unerwünschte Elemente messen.

+1 für die Antwort von @Lunivore und ich würde eine Sache hinzufügen. Die interessanteste Metrik in Bezug auf Fehler (IMHO) ist die Anzahl der Fehler, die sich in die Produktion eingeschlichen haben. Aber ... Sie sollten es nicht verwenden, um Einzelpersonen zu bewerten, sondern um Probleme zu erkennen, wie der Qualitätsprozess in Ihrem Team funktioniert. Denken Sie also darüber nach, wie Sie diese Zahl senken können. Sie haben viele Möglichkeiten: bessere Tests, CI, Schulung Ihrer Entwickler usw. Verwenden Sie es nicht, um Strafen zu implizieren, sondern um sich zu verbessern.
Was @marcin-niebudek gesagt hat. Fügen Sie auch gesunden Menschenverstand hinzu. Ich habe ein Team gefunden, dessen Fehlerzahl trotz ihrer Bemühungen, sie zu beheben, gestiegen ist. Es stellte sich heraus, dass die Benutzer bemerkt hatten, dass sie die Fehler behoben hatten, und begannen, mehr davon zu melden.
Ich unterstütze alles. Ich möchte hinzufügen, dass Entwickler kluge Leute sind; mehr noch, sie LIEBEN es, die anderen (das System, einen Computer usw.) zu überlisten. Die besten Entwickler sind herausfordernd. In einem Team, in dem ich arbeitete, erzwang der PM diese Art von Metrik. Jeder war so daran interessiert, „das System zu schlagen“, dass die Arbeit schließlich zum Erliegen kam und viele an einer SW arbeiteten, um vorherzusagen, wie sie ihre Punktzahl maximieren könnten …
Und ich bin überrascht, dass noch niemand Dilbert zitiert hat ... dilbert.com/strips/comic/1995-11-13
"defensive Programmierung, die die Wartungskosten erhöht" - defensive Programmierung ist, wenn Sie alle Rückgabecodes überprüfen, alles auf null überprüfen usw., nicht wahr? Wie wird das die Wartungskosten erhöhen? OK, es könnte bedeuten, dass Sie mehr Testfälle für die Abdeckung schreiben müssen, aber das sind einmalige Kosten im Voraus.
@Rup Es ist mehr Code, den Entwickler durchlesen müssen, um zu verstehen, was der Code tut - und Code, der normalerweise nie in der Produktion verwendet wird . Alles, was es tut, ist zu sagen: "Oh, da ist ein Fehler, und er ist nicht in meinem Code, also muss er in Ihrem sein." Es ist eine Angewohnheit von Schuldzuweisungskulturen, und kollaborative Teams mit kollektivem Code-Eigentum brauchen es nicht. Behandeln Sie jedes Stück Code, das Sie schreiben, als Belastung. Weniger ist besser.
Ich würde den Vorhersagen Folgendes hinzufügen: Erhöhter Streit zwischen Testern und Entwicklern, einschließlich, aber nicht beschränkt auf: Erhöhte Argumentation darüber, ob es sich tatsächlich um einen Fehler handelt. Entwickler behaupten, dass mehrere Fehlerberichte Duplikate sind, obwohl dies nicht der Fall ist.
@Rup: Ich denke, eine andere Art, an defensives Codieren zu denken, ist "schüchternes Codieren" oder "feiges Codieren". Ich habe unzählige Stunden damit verbracht sicherzustellen, dass ich nichts zu schickes und modernes geschrieben habe, aus Angst, dass es im IE oder einem Off-Browser kaputt gehen würde. Dies führte nicht zu cleveren abwärtskompatiblen Lösungen, sondern zu verlorener Zeit beim Schreiben von weniger modernem und weniger leistungsstarkem Code aus Angst, ein CEO könnte immer noch auf IE6 arbeiten. Das Gegenteil ist der „git-er-dun“-Ansatz, bei dem Entwickler etwas schreiben, von dem sie wissen , dass es funktionieren wird, aber nicht integriert oder skalierbar ist, sondern nur den Basisbereich erfüllt.
@Anthony OK, vielleicht meinen alle anderen etwas anderes mit "defensiver Codierung" - für mich ist es nicht "mach es nicht clever, nur für den Fall", sondern gehe davon aus, dass du unerwartete Nullen bekommst und damit fertig wirst, das alles Funktions- und API-Aufrufe können fehlschlagen und Sie müssen alle Ergebnisse überprüfen, und Sie sollten niemals einfach vor einem Benutzer abstürzen, sondern elegant scheitern, um ihm stattdessen die Möglichkeit zu geben, seine Arbeit wiederherzustellen.
@Rup Anmutig zu scheitern gehört immer zu meinen Top-3-Zielen, also sind wir uns darüber einig. Aber Fehler werden passieren, und wenn sie sich auf Ihren Gehaltsscheck auswirken, werden Sie sich mehr darauf konzentrieren, dass Scheitern keine Option ist, anstatt elegant zu scheitern.
@Rup Wenn Ihr Team keine Kontrolle über den Code hat, ist das eine faire Art zu spielen, aber siehe Eric Evans "Domain Driven Design", Kap. 14 aufwärts, für unterschiedliche Wege, je nach Vertrauen, Downstream/Upstream usw. Wenn Sie die Kontrolle über den Code haben, kann er entweder sinnvoll null sein (so wird es erwartet) oder Sie beheben den Fehler als Team. Fügen Sie keinen Code hinzu, um mit Fehlern fertig zu werden (trotz des ordnungsgemäßen Scheiterns), beheben Sie einfach die Fehler.
Sicher, zB für unerwartete Nullen würde ich eine Ausnahme in einem Debug-Build behaupten oder auslösen, damit sie abgefangen und behoben werden kann. Ich würde nur sicherstellen, dass der Release-Build nicht abstürzt, wenn er zur Laufzeit eine unerwartete Null erhält.
@Rup Warum würden Sie in einem Debug-Build eine Ausnahme auslösen? Irgendwann wird es sowieso eine Null werfen, oder? Ich bin froh, es einfach zu lassen, herauszufinden, was schief gelaufen ist, wenn es passiert (und einige Unit-Tests zu schreiben, damit meine Teamkollegen herausfinden können, wie sie den von mir geschriebenen Code richtig verwenden können!)
Hallo, wie soll dann die Leistung gemessen werden? Welche Metriken sollten in KPI enthalten sein?
Messen Sie überhaupt keine Einzelpersonen, es sei denn, Sie wollen heldenhaftes Verhalten, das die Fähigkeit des Teams, etwas zu liefern, stört. Zahlen Sie ihnen stattdessen genug Geld, um das Thema Geld vom Tisch zu nehmen (Dan Pink, Drive), und nutzen Sie Dinge wie 360-Grad-Feedback nur, um ihnen zu helfen, sich zu verbessern.

Ich denke, dir fehlen auch ein paar KPIs ...

Negative Punkte jedes Mal, wenn ein Product Owner eine Anforderung ändert. Sie hätten wissen müssen, was sie wollten, bevor die Entwicklung begann.

Negative Punkte jedes Mal, wenn ein Tester doppelte Punkte eingibt. Vielleicht bekommen sie jedes Mal positive Punkte, wenn sie einen Fehler finden?

Negative Punkte für die Personalabteilung jedes Mal, wenn ein „guter“ Entwickler geht, um woanders zu arbeiten. Und positive Punkte jedes Mal, wenn sie einen Entwickler überreden können, für Sie zu arbeiten, weil das eine schwierige Sache wird ;-)

Das ist auf so vielen Ebenen eine schlechte Idee.

Lassen Sie uns die Möglichkeiten auflisten:

  • Baut eine Schuldzuweisungskultur auf: Jeder wird versuchen, alle anderen für gefundene Fehler verantwortlich zu machen, weil dies ihre Überprüfung beeinflussen wird
  • Ermutigt die Menschen, keine Verantwortung zu übernehmen. Wenn Sie die Verantwortung übernehmen (es ist mein Fehler), werden Sie bestraft
  • Verletzt die Beziehungen zwischen den Teams. Entwickler und Tester kommen normalerweise nicht miteinander aus, aber können Sie sich die Feindseligkeit vorstellen, die die Entwickler gegenüber Testern empfinden werden, wenn jeder Fehler, den ein Tester findet, einem Entwickler in seiner Überprüfung effektiv schadet.
  • Verlangsamt die Geschwindigkeit und kostet mehr. Jede Spezifikation muss sehr detailliert geschrieben werden, oder die Entwickler werden sie nicht berühren. Es wird eine massive Zunahme an Entwicklertests geben, um sicherzustellen, dass es keine Fehler gibt (und das wird wahrscheinlich sowieso nicht funktionieren).
  • Risikoaverse Kultur. Niemand wird etwas Neues ausprobieren wollen, denn neu bedeutet riskant. Vergessen Sie neue Techniken, neue Technologien, neue Organisationsmechanismen.
  • Flug sicher. Niemand wird an den "harten" Teilen des Systems arbeiten wollen, weil sie eher Fehler einführen werden. Jeder wird die Admin-Bildschirme schreiben wollen, niemand wird tatsächlich die Kernfunktionalität codieren wollen.

Die Verhaltensweisen, die Sie fördern möchten, sind:

  • Verantwortung. Menschen, die Verantwortung für Probleme übernehmen und diese beheben, sollten belohnt werden.
  • Proaktivität. Leute, die Ideen haben, um Dinge besser zu machen, sollten belohnt werden
  • Experimentieren. Wir finden heraus, was gut funktioniert, indem wir verschiedene Dinge ausprobieren und neue Technologien erlernen
  • Geschwindigkeit. Am Ende des Tages haben alle das gleiche Ziel: das Projekt fertig zu stellen und zu liefern. Sie möchten dies so schnell wie möglich tun.

Damit:

  • Ich denke, du machst das Falsche
  • Sie sollten diese Diskussion nicht mit uns führen, sondern mit Ihren Entwicklern
  • Wenn Sie diesen Weg fortsetzen, werden 3 Dinge für Sie erledigt:

    1. Senken Sie die Moral Ihrer Entwicklungsteams

    2. Steigern Sie die Mitarbeiterfluktuation, wenn sie in sinnvolleren Entwicklungsumgebungen nach Arbeit suchen

    3. Reduzieren Sie die Liefergeschwindigkeit für Ihre Kunden.

Sie müssen nun auswählen, wie Sie fortfahren möchten.

Nein, es ist eine gute Frage zu einer schlechten Idee. Besser er fragt und bekommt ehrliche Antworten, die ihn vor den Konsequenzen warnen, sollte er versuchen, seine schlechte Idee umzusetzen, als einfach weiterzumachen. Bis auf "Also:" war deine Antwort eigentlich ganz brauchbar, aber zum Rest: Deine Antwort sollte runtergevotet werden.
Gute Herausforderung. Meine Enttäuschung über die Frage ist wie folgt: Er scheint dies als gute Idee zu akzeptieren und hat seine Entwickler entweder nicht gefragt, ob dies für sie funktioniert, oder ihre Antwort ignoriert. Eine Strohumfrage des Entwicklerteams, in dem ich mich befinde, ergab eine fast sofortige und einstimmige Antwort, dass dies eine schreckliche Idee sei. Also ja, der letzte Teil meiner Antwort war hart. Wenn Sie stark daran interessiert sind, mich abzuwerten, tun Sie dies bitte, es ist gut, dass die Leute ihre Meinung äußern.
+1 - Ich glaube nicht, dass Ihre Antwort unangemessen war, und dies sind alles wirklich gute Ratschläge für einen PM aus der Sicht eines anderen PM.

Leistungsbewertungen auf der Grundlage von Fehlern sind meiner Meinung nach eine ziemlich schlechte Idee.

Selbst in den besten Szenarien, in denen angenommen wird, dass Tester perfekte Arbeit leisten, ist es sehr schwierig, eine Art Bugtracker zu implementieren, der keine Nebenwirkungen erzeugt.

Sie könnten in Betracht ziehen, eine Art Metrik für Nacharbeitsstunden zu verwenden. Das funktioniert tendenziell besser, weil:

  1. Sie sagen ihnen nicht, dass sie das Unmögliche tun sollen, nämlich Fehler zu beseitigen.
  2. Es ist einfacher zu quantifizieren
  3. Das ist die TATSÄCHLICHE geschäftliche Auswirkung, unter der das Unternehmen leidet.

Verlagern Sie den Schwerpunkt von Fehlern auf leistungsfähigere Software, es macht einfach mehr Sinn.

Darüber hinaus konzentrieren sich Tester möglicherweise mehr auf bestimmte Funktionen und melden daher mehr Fehler. Selbst wenn dieser Code von höherer Qualität ist, kann es eine höhere Anzahl von Fehlern geben, da es sich nicht um tatsächliche Fehler handelt, sondern um gemeldete Fehler.

Ich plane, einem Entwickler 40 Punkte (mein Bewertungssystem) zu geben, wenn er fehlerfreien Code erstellt.

Wie wäre es, wenn Sie die Programmierer fragen, wie viel (Geld) sie ausgeben würden, wenn ihnen jemand zeigen könnte, wie man fehlerfreien Code erstellt? Professionelles Programmieren ist keine leichte Aufgabe und es gibt viel bessere Möglichkeiten, gute Programmierer zu beurteilen.

Hier sind einige Gründe, warum man mit fehlerhaftem Code endet:

1. Das Management beschließt, einige neue Funktionen einzuführen, die einigen anderen zuvor implementierten Funktionen widersprechen würden. Ich meine, wer will keine neuen Features?

2. Das Management möchte diese in der nächsten Version haben, aber keine Zeit, den vorhandenen Code umzugestalten und zu bereinigen. Ich meine, wenn der Kunde nichts Neues sieht, was wird das Management präsentieren? Wir haben keine neuen Funktionen in dieser Version, aber jetzt funktioniert alles so, wie es soll? Ja, versuchen Sie, das vor einem Publikum zu sagen

Was Sie wirklich brauchen, heißt Code-Review, es wird von professionellen Programmierern durchgeführt, die den Code paarweise durchgehen und die Probleme beheben, aber damit dies funktioniert, brauchen Sie mindestens einen guten Programmierer. Heutzutage gilt jeder, der tippen kann, als Programmierer.

PS: Die obigen Kommentare stammen aus der Sicht eines Programmierers und eines Managers.

Also... 40 Punkte für das Erstellen von "fehlerfreiem Code"? Das klingt nach ... sinnlos, es überhaupt zu versuchen! :) Ich stimme Ihrer Antwort voll und ganz zu, und als Programmierer (der es "hasst", ein Manager zu sein), denke ich, dass fehlerfreier Code nicht geschrieben werden kann, ohne wirklich genau zu wissen, was Sie tun / codieren und das "große Ganze" sehen / verstehen " von dem Projekt. Im Idealfall sollte ein neues Feature scheinbar am bestehenden Code "kleben".
Ich würde allem zustimmen, was @leoinfo sagt, wenn alles nach "ohne es wirklich zu wissen" entfernt wird. Fehlerfreier Code kann nicht geschrieben werden. Zeitraum.
@DavidStockton, das ist eine etwas extreme Aussage. Schon mal was von formaler Verifizierung gehört? en.wikipedia.org/wiki/Formal_verification
Ich kann Ihnen sagen, wie man fehlerfreien Code schreibt. Sie werden nicht auf null Fehler kommen, aber Sie können nahe kommen. Sie können dies jedoch nicht durch Anstrengung tun. Sie benötigen ein paar Werkzeuge.
@zooone9243 In der Theorie sind Theorie und Praxis gleich. In der Praxis sind sie es nicht.
@Izkata Die Aussage lautet: "Fehlerfreier Code kann nicht geschrieben werden. Punkt." Offensichtlich ist dies eine weitschweifige Aussage, die leicht widerlegt werden kann. Sie könnten vielleicht sagen: „Im Allgemeinen ist es unmöglich, in einer Geschäftsumgebung vollständig fehlerfreien Code zu schreiben.“ Sie können jedoch keine umfassende Aussage darüber treffen, dass fehlerfreier Code niemals geschrieben werden kann. Es kann und es hat.
@zooone9243 Formale Beweise sind vom Code getrennt. Die Transkription zwischen den beiden kann leicht Fehler einführen oder verbergen. Das einzige, was möglicherweise als fehlerfrei angesehen werden könnte, sind triviale Programme wie Hello World - in denen ich gelegentlich Fehler gesehen habe, normalerweise in Bezug auf Zeichensätze.
Außerdem können nicht alle Grammatiksätze einen formalen Beweis haben, dh es gibt Code, der etwas implementiert, aber keinen formalen Beweis dafür haben kann, dass er fehlerfrei ist. Es gibt einige Bücher über die formale Auswertung von Code, die die unentscheidbaren Fälle beinhalten. Dieses Buch: amazon.com/Toward-Defect-Programming-Allan-Stavely/dp/… ist ein anständiges Buch zu diesem Thema.

Das Festlegen eines Ziels wie der Anzahl der Fehler ist etwas, das leicht auszutricksen ist, und es ist leicht, jemanden zu finden, dem die anderen die Schuld geben können. Das zerstört Ihren Teamzusammenhalt. Bitte messen Sie die Menschen nicht an den Fehlern, die sie eingeführt haben. Wenn Sie dies tun, werden sie nichts festschreiben, bis sie zu 100 % sicher sind, dass es fehlerfrei ist, und Sie werden nie eine Veröffentlichung haben. Während ich diese Antwort schrieb, kamen mir 7 verschiedene Möglichkeiten, diesen KPI auszutricksen, also werde ich wie ein ziemlich guter Entwickler aussehen, während ich nichts Gutes für die Organisation tue.

Ich habe einen anderen Vorschlag. Suchen Sie nach wiederkehrenden Problemen . Wenn Sie Mitarbeiter bewerten, konzentrieren Sie sich auf ihren Fortschritt und belohnen Sie diejenigen, die sich ständig verbessern, und lassen Sie diejenigen gehen, die sich nicht verbessern.

Nehmen wir an, wir arbeiten zusammen und ich mache viele Programmierfehler. Wir sind uns einig, dass ich mehr über die Sprache lerne, die wir verwenden. Du wirst meinen Fortschritt überprüfen und wenn sich mein Programmierstil verbessert, belohnst du mich. Wenn nicht, dann haben wir etwas zu besprechen.

+1 für „Nach wiederkehrenden Problemen suchen“ – Sie möchten eine Kultur wie TPS/Lean entwickeln, die nach Wegen sucht, wiederkehrende Probleme zu beseitigen, anstatt Einzelpersonen die Schuld zu geben.

Die Einwände aller Mitwirkenden sind zielführend und diese stimmen bei allen KPIs. Sie legen eine Metrik für gesteigertes erwünschtes Verhalten fest, dieses erwünschte Verhalten wird „bezahlt“ durch das Entfernen anderer Verhaltensweisen, von denen einige ebenfalls erwünscht sind. Aus diesem Grund ist die Erstellung Ihrer KPIs sehr herausfordernd und Sie müssen dies mit Sorgfalt tun.

Hier ist ein ausgewogener Ansatz erforderlich, bei dem Sie, wenn Sie die Reduzierung von Qualitätsmängeln messen, auch die anderen Verhaltensweisen messen und belohnen müssen, die wahrscheinlich ebenfalls betroffen sein werden. Wenn ich zum Beispiel an Qualität gemessen werde, werde ich langsamer und meine Arbeit doppelt überprüfen. Dem muss man also rechtzeitig mit einer Messung entgegenwirken. Ich würde auch weniger Risiken eingehen, was man in vielen Umgebungen nicht möchte. Dem muss man also entgegenwirken. Sie müssen auch auf Ursache und Wirkung achten, die Beziehung zwischen der unabhängigen Variablen (was Sie manipulieren) und der abhängigen Variablen (dem Ergebnis). Was intuitiv, logisch und sogar "gesunder Menschenverstand" erscheint, ist zu oft nicht wahr. Man sollte meinen, dass eine Gehaltserhöhung positive Auswirkungen auf die Arbeitsmoral und den Arbeitseinsatz hat. Tatsächlich wird die Moral nicht berührt,

Es kann sein, dass die Bewertung von Fehlern nicht die Lösung zur Qualitätssteigerung ist, sondern eher die Verhaltensweisen bewertet werden, die zu Qualität führen, dh Frühindikatoren. Wir wissen, dass erhöhte Fähigkeiten höhere Leistung bedeuten sollten, also gibt es vielleicht ein oder zwei KPIs, die den Erwerb und die Beherrschung von Fähigkeiten motivieren.

"Sie legen eine Metrik für erhöhtes gewünschtes Verhalten fest, dieses gewünschte Verhalten wird "bezahlt" durch die Entfernung anderer Verhaltensweisen, von denen einige ebenfalls erwünscht sind." Dieses Verhalten wird ausführlich in Robert Austins Buch Measuring and Managing Performance in Organizations untersucht . ( dorsethouse.com/books/mmpo.html ) Mr. Austin beschreibt auch, wie fast immer einige gewünschte Verhaltensweisen nicht messbar sind, man einen Proxy misst, aber der Proxy nicht perfekt ist und die Leute den Proxy erhöhen Wert, während das gewünschte Verhalten verringert wird.

Um ehrlich zu sein, glaube ich, dass Sie das nicht tun sollten. Meiner Meinung nach gibt es keinen fairen Weg, dies zu messen. Kein Programmierer, egal wie erfahren er ist, wird fehlerfreien Code erstellen. Manchmal werden Fehler von anderen Fehlern verdeckt. Manchmal entstehen Fehler aus der Interaktion zweier separater Codeteile, die für sich genommen frei von Fehlern sind. Vielleicht bleiben wirklich schwerwiegende Fehler monate- oder jahrelang unentdeckt.

Ich glaube, das ist genauso falsch wie der Versuch, die Leistung anhand der Anzahl der pro Tag produzierten Codezeilen zu messen.

+1 - Programmieren ist nicht wie das Wechseln Ihrer Zündkerzen an Ihrem Auto, wo es sehr detaillierte Spezifikationen und Anweisungen dazu gibt, was Sie genau tun müssen. In vielen Programmierszenarien tun Sie möglicherweise Dinge, die noch niemand zuvor getan hat, was bedeutet, dass die Software möglicherweise etwas volatil ist, bis Fehler entdeckt und behoben werden.

Qualität ist ein Prozess und kein einfaches Maß für „Fehler“-Raten. Sie verbessern die Qualität, indem Sie einen besseren Prozess von Anfang bis Ende schaffen, der sich über alle Ebenen der Organisation erstreckt. Die Benachteiligung einer Rolle in der Wertschöpfungskette wird Ihnen nicht dabei helfen, Ihr Ziel zu erreichen.

Ich habe einmal in einer solchen Umgebung gearbeitet und weißt du was? Ich verließ diesen Ort mit Wut und in sehr schlechten Bedingungen. Und das ist es, woran Sie leiden werden, wenn Sie tatsächlich versuchen, die Fähigkeiten Ihrer Entwickler anhand ihrer Fehler zu messen.

Du machst alles falsch. So haben wir es damals behoben:

Erstellen Sie eine komplexe, aber kurze gedruckte Liste der wichtigsten Punkte.

  • Haben Sie diesen Code auf Exploits und kritische Sicherheitslücken überprüft?
  • Haben Sie es gut kommentiert, damit jemand es sofort reparieren kann, wenn jemand anderes dort hineingeht.
  • usw.

Wenn jemand diese Liste NICHT überprüft, bevor er DANN freigibt, können Sie ihm oder ihr die Schuld geben.

So sollte es laufen. Denn wenn Sie anfangen, Fehler zu messen, werden Sie sehr schlechtes „Karma“ von Ihrem Mitarbeiter bekommen, alle werden Sie hassen und mit Ihnen umgehen, als ob Sie ein Diktator wären. Und auch Sie werden denen Anerkennung zollen, die absolut nichts Gutes tun!

Jeder macht Fehler und es gibt immer DIESE Kleinigkeit, an die wir uns vor der Veröffentlichung nicht erinnern, und deshalb gibt es Hotfixes !

Können Sie solche Checklisten teilen, wenn Sie eine haben?

Dies ist ein Paradebeispiel für „Messungsstörung“.

Jeder Versuch, einen Mitarbeiter auf der Grundlage einer harten Metrik zu belohnen oder zu bestrafen, wird fehlschlagen. Der Mitarbeiter ist schlau genug, die Metrik zu spielen, und normalerweise mit dem gegenteiligen Effekt, der beabsichtigt war.

Joel Spolsky hat es in diesen Blogbeiträgen sehr gut behandelt:

Joels Artikel enthalten viele Beispiele, einschließlich des Themas dieser Frage:

Angenommen, Sie entscheiden sich, dem Entwickler mit den wenigsten Fehlern einen Bonus zu zahlen. Jedes Mal, wenn ein Tester versucht, einen Fehler zu melden, wird dies zu einem großen Streit, und normalerweise überzeugt der Entwickler den Tester, dass es sich nicht wirklich um einen Fehler handelt. Oder der Tester stimmt zu, den Fehler „formlos“ dem Entwickler zu melden, bevor er ihn in das Fehlerverfolgungssystem einträgt. Und jetzt benutzt niemand das Bug-Tracking-System. Die Anzahl der Fehler geht weit zurück, aber die Anzahl der Fehler bleibt gleich.

Entwickler sind auf diese Weise clever. Was auch immer Sie zu messen versuchen, sie werden einen Weg finden, es zu maximieren, und Sie werden nie ganz das bekommen, was Sie wollen.


Wenn Sie die Vergütung von jemandem an ein beliebiges numerisches Bewertungssystem binden, drängen Sie diese Person, sich an das Bewertungssystem zu halten, anstatt daran zu arbeiten, tatsächlich Geschäftsergebnisse zu erzielen. „Ich bekomme die volle Punktzahl, wenn ich keine Fehler schreibe? Cool! Ich werde keinen Code schreiben!“

Die logische Folge dieser Regel ist, dass Sie sich kein Bewertungsschema ausdenken können, das nicht auf unnütze Weise „gespielt“ werden kann.

Für ein System, das ausreichend komplex ist, um wirklich wertvolle Arbeit zu leisten, werden Sie niemals fehlerfreien Code haben. Sie haben weniger fehlerhaften und mehr fehlerhaften Code. Aber da wird irgendwo ein Bug drin sein.

Es gibt auch enorme Kosten für 100% fehlerfreien Code, die gegen den Vorteil einer früheren Veröffentlichung (und eines späteren Patches) abgewogen werden müssen. Für von Menschen bewertete Software (z. B. ein Dialysemaschinenmodul) ist die Beseitigung von Fehlern von entscheidender Bedeutung. Für viele andere Systeme nicht so sehr.

Ich denke, Sie werden nur Ihre Kollegen verärgern und sich einige Feinde machen.

Bugs sollten vom Tester abgeholt werden. Wenn dieser Tester das Gefühl hat, dass ein bestimmter Mitarbeiter ständig Dinge kaputt macht, dann ist es sinnvoll, mit diesem Mitarbeiter zu sprechen und zu sehen, wie seine Leistung verbessert werden kann. Anstatt alle wegen ihres Jobs paranoid und unsicher zu machen.

Wie bei allen anderen bisher bin ich ziemlich dagegen. Ein paar Gründe fallen mir ein:

Außendruck

Die meisten Unternehmen erlauben den Unternehmen, die Softwareentwicklung unter Druck zu setzen/zu kontrollieren. Was ich meine, ist, dass nur sehr wenige Orte einen Entwickler fragen, wie lange es dauern wird, etwas zu tun, und ihm dann so lange Zeit lassen. Sie geben einen Zeitplan vor, der dem Product Owner nicht gefällt, und Sie werden wahrscheinlich von ihm unter Druck gesetzt, dies früher zu erledigen.

Während es immer noch der Entwickler ist, der Fehler schreibt, sind viele Kräfte im Spiel. Er möchte nicht dafür bestraft werden, dass er geschäftliche Anforderungen nicht erfüllt. Aber wenn sie ihn weiterhin unter Druck setzen, an einem Tag ein Feature zu schreiben, das eine Woche dauern sollte, können Sie darauf wetten, dass es Fehler geben wird.

Mehrere Ebenen

Bei mehreren Ebenen oder Ebenen von Software könnte ein Fehler in der oberen Ebene gefunden werden, aber tatsächlich durch etwas tieferes verursacht werden. Außerdem könnten „Bugs“ eingeführt werden, weil die Schichten missverstanden, was die anderen taten.

Abnahme der Produktivität

Die tatsächliche Produktivität wird sinken, da Sie jetzt nicht nur das Projekt einer Qualitätssicherung unterziehen müssen, sondern sich auch Zeit nehmen müssen, um die wahre Ursache und den Schuldigen herauszufinden. Während dies einfach erscheinen mag, würde ich wetten, dass es zu etwas Größerem explodieren wird. Wenn meine Leistung darauf basiert, dass ich keine Fehler bekomme und Sie versuchen, mir einen Fehler zuzuweisen, können Sie darauf wetten, dass ich argumentieren werde, dass dies nicht der Fall ist. Dies wird keine einfache E-Mail sein, in der steht: „Das war Johns Schuld, nicht meine.“ Denn jetzt wird John antworten. Am Ende sitzen Sie mindestens einmal pro Woche in stundenlangen Besprechungen und versuchen, alle Fehler zu sortieren.

Entwickler müssen professionell sein

Ansätze wie dieser mindern tendenziell die Professionalität von Entwicklern. Denken Sie an CEOs, sie werden oft anhand des Gesamtwachstums des Unternehmens bewertet, richtig? Wenn sie einen 100.000-Dollar-Kunden im Jahr verlieren, ist das vielleicht schlecht, aber es wird oft heruntergespielt, wenn sie das Unternehmen in diesem Jahr immer noch um 500.000 Dollar wachsen lassen.

Pläne, die versuchen, Entwickler an Metriken wie diese (Anzahl der veröffentlichten Fehler oder Anzahl der geschriebenen Codezeilen, veröffentlichte Funktionen, geschriebene Tests usw.) zu binden, nehmen Entwickler aus dem Bereich eines professionellen Angestellten und platzieren sie in der Kategorie der Stundenarbeiter.

Stellen Sie sich vor, Sie haben einen Stundenarbeiter, der Briefe verschickt. Sein Ziel könnte eine Genauigkeit von 100 % sein, und Sie beschließen, ihm für jeden Buchstaben, den er vermasselt, 1 Punkt anzuhängen.

Das ist im Wesentlichen das, was Sie Entwicklern antun. Sie nehmen eine Gruppe von Menschen, die typischerweise:

  1. Kreativ
  2. Gewidmet
  3. Innovativ
  4. Leidenschaft für ihre Arbeit

Und Sie machen sie zu Fabrikarbeitern. Sie werden anfangen, „auf die Uhr zu schlagen“. Sie werden anfangen, nach dem schnellsten und einfachsten Weg zu suchen, um JETZT etwas zu tun, ohne darüber nachzudenken, wie es sich in Zukunft entwickeln wird. Warum schließlich eine ganze Summenroutine bauen, wenn ich die Werte für 1*1 bis 12*12 einfach fest codieren kann. So weiß ich, dass es keine Fehler gibt.

Vorbehalt

In Anbetracht dessen sage ich jedoch NICHT , dass Entwickler nicht zur Rechenschaft gezogen werden sollten. Ich denke absolut, dass sie das tun sollten, und ehrlich gesagt, jeder Entwickler, der es wert ist, in der Nähe zu bleiben, wird keine Fehler veröffentlichen wollen. Wenn Sie Entwickler haben, denen es nichts ausmacht, Fehler zu veröffentlichen, sollten Sie sie sofort feuern (im Ernst, tun Sie es vor dem Mittagessen.)

TL;DR

Ich kann mir kein anderes berufliches Umfeld oder Beruf vorstellen, in dem Menschen versuchen, diese Art von Metriken aufeinander anzuwenden.

Wenn ein Manager nicht sagen kann, wer seine Top-Performer und wer seine Low-Performer sind, dann sollte diese Person keine Softwareentwickler verwalten, weil sie keine Ahnung hat.

Bevor Sie eine Metrik anwenden, müssen Sie viel Zeit damit verbringen, die richtige zu finden, oder Sie riskieren, Ihre Top-Performer zu verdrängen, da sie nicht wie kleine Kinder oder Fließbandarbeiter behandelt werden wollen (und am Ende Sie entscheidet sich möglicherweise dafür, keine Metriken zu haben.)

Ich habe das gesehen. Ein typischer neuer PM, der aus dem Geschäft kam (in diesem Fall ein multinationaler Einzelhandelskonzern), hatte gedacht, dass jede Abteilung gleich ist – wenn es ein Problem gibt, dann schlagen Sie den falschen Macher und halten Sie alle auf Trab. Funktioniert nie mit IT. Die meisten Projekte, die überhaupt einen PM erfordern, bedeuten mehrere Programmierer und Sys-An, Bus-An, Benutzerunterstützung, Architekten usw. usw. Alle mit ihren Rudern im Wasser. Scope Creep, Aufgabenverschiebung, Verzögerungen, Meilensteineinschränkungen, Upstream-/Downstream-Systemänderungen, Personalbesetzung/Krankheit/Urlaub/Neuzuweisung/Vertragsänderungen, externe Systemprobleme, Hardwareprobleme, Domänen-/Umgebungsprobleme, Einrichtungsprobleme, Legacy-Code/-Systeme, schlecht Code, der als Basis in das Projekt einfließt (dh ursprünglicher Code, der ergänzt werden muss), ist die Liste fast endlos - so viele Dinge führen dazu, dass sich die Dinge an der Kohlefront ändern. Gute Entwicklerteams werden dies kompensieren, die zusätzlichen Stunden aufwenden, die Extrameile gehen – und ihre Eventualitäten aus dem Fenster werfen. Das bedeutet Fehler. Dies ist an sich kein Problem, es ist Teil des Prozesses - es ist nicht wie ein Stuhlhersteller, der einen Miststuhl herstellt, der in den Mülleimer wandert, Fehler können behoben werden. Wenn Sie KPIs ausführen möchten, tun Sie dies anhand der Anzahl der als Team behobenen Fehler, nicht der erhobenen. Andernfalls werden Fehler versteckt oder „zusammengeführt“ – Schuld wird in alle Richtungen (auch nach oben!) geschossen. Es wird auch für ein restriktives Umfeld sorgen. Wenn Sie als Entwicklungsleiter mitten im Projekt zu mir kommen und auf eine Änderung drängen, würde ich Ihnen sagen, dass Sie bis zur nächsten Phase warten sollen – es würde überhaupt kein Scope Creep geben, es sei denn, Sie sind bereit, alle Fehler abzuschreiben und den KPI zu übernehmen stattdessen schlagen. gehen Sie die Extrameile - und werfen Sie ihre Eventualitäten aus dem Fenster. Das bedeutet Fehler. Dies ist an sich kein Problem, es ist Teil des Prozesses - es ist nicht wie ein Stuhlhersteller, der einen Miststuhl herstellt, der in den Mülleimer wandert, Fehler können behoben werden. Wenn Sie KPIs ausführen möchten, tun Sie dies anhand der Anzahl der als Team behobenen Fehler, nicht der erhobenen. Andernfalls werden Fehler versteckt oder "zusammengeführt" - Schuld wird in alle Richtungen (auch nach oben!) geschossen. Es wird auch für ein restriktives Umfeld sorgen. Wenn Sie als Entwicklungsleiter mitten im Projekt zu mir kommen und auf eine Änderung drängen, würde ich Ihnen sagen, dass Sie bis zur nächsten Phase warten sollen – es würde überhaupt kein Scope Creep geben, es sei denn, Sie sind bereit, alle Fehler abzuschreiben und den KPI zu übernehmen stattdessen schlagen. gehen Sie die Extrameile - und werfen Sie ihre Eventualitäten aus dem Fenster. Das bedeutet Fehler. Dies ist an sich kein Problem, es ist Teil des Prozesses - es ist nicht wie ein Stuhlhersteller, der einen Miststuhl herstellt, der in den Mülleimer wandert, Fehler können behoben werden. Wenn Sie KPIs ausführen möchten, tun Sie dies anhand der Anzahl der als Team behobenen Fehler, nicht der erhobenen. Andernfalls werden Fehler versteckt oder „zusammengeführt“ – Schuld wird in alle Richtungen (auch nach oben!) geschossen. Es wird auch für ein restriktives Umfeld sorgen. Wenn Sie als Entwicklungsleiter mitten im Projekt zu mir kommen und auf eine Änderung drängen, würde ich Ihnen sagen, dass Sie bis zur nächsten Phase warten sollen – es würde überhaupt kein Scope Creep geben, es sei denn, Sie sind bereit, alle Fehler abzuschreiben und den KPI zu übernehmen stattdessen schlagen. es ist Teil des Prozesses - es ist nicht wie ein Stuhlhersteller, der einen Miststuhl herstellt, der in den Mülleimer wandert, Fehler können behoben werden. Wenn Sie KPIs ausführen möchten, tun Sie dies anhand der Anzahl der als Team behobenen Fehler, nicht der erhobenen. Andernfalls werden Fehler versteckt oder "zusammengeführt" - Schuld wird in alle Richtungen (auch nach oben!) geschossen. Es wird auch für ein restriktives Umfeld sorgen. Wenn Sie als Entwicklungsleiter mitten im Projekt zu mir kommen und auf eine Änderung drängen, würde ich Ihnen sagen, dass Sie bis zur nächsten Phase warten sollen – es würde überhaupt kein Scope Creep geben, es sei denn, Sie sind bereit, alle Fehler abzuschreiben und den KPI zu übernehmen stattdessen schlagen. es ist Teil des Prozesses - es ist nicht wie ein Stuhlhersteller, der einen Miststuhl herstellt, der in den Mülleimer wandert, Fehler können behoben werden. Wenn Sie KPIs ausführen möchten, tun Sie dies anhand der Anzahl der als Team behobenen Fehler, nicht der erhobenen. Andernfalls werden Fehler versteckt oder "zusammengeführt" - Schuld wird in alle Richtungen (auch nach oben!) geschossen. Es wird auch für ein restriktives Umfeld sorgen. Wenn Sie als Entwicklungsleiter mitten im Projekt zu mir kommen und auf eine Änderung drängen, würde ich Ihnen sagen, dass Sie bis zur nächsten Phase warten sollen – es würde überhaupt kein Scope Creep geben, es sei denn, Sie sind bereit, alle Fehler abzuschreiben und den KPI zu übernehmen stattdessen schlagen. Es wird auch für ein restriktives Umfeld sorgen. Wenn Sie als Entwicklungsleiter mitten im Projekt zu mir kommen und auf eine Änderung drängen, würde ich Ihnen sagen, dass Sie bis zur nächsten Phase warten sollen – es würde überhaupt kein Scope Creep geben, es sei denn, Sie sind bereit, alle Fehler abzuschreiben und den KPI zu übernehmen stattdessen schlagen. Es wird auch für ein restriktives Umfeld sorgen. Wenn Sie als Entwicklungsleiter mitten im Projekt zu mir kommen und auf eine Änderung drängen, würde ich Ihnen sagen, dass Sie bis zur nächsten Phase warten sollen – es würde überhaupt kein Scope Creep geben, es sei denn, Sie sind bereit, alle Fehler abzuschreiben und den KPI zu übernehmen stattdessen schlagen.

Dieser Ansatz wird auf Sie zurückschlagen – denken Sie noch einmal darüber nach!

Ich bin nicht einverstanden mit "mach es auf die Anzahl der Fehler, die als Team behoben werden, nicht aufgeworfen". Setzen Sie mich in dieses Team, und ich verbringe jeden Morgen eine Stunde damit, sichtbare Fehler hinzuzufügen, die leicht zu beheben sind. Woo hoo – hier kommt mein Bonus!
Ich denke, das ist ein Trugschluss. Es wäre ein ziemlich schlechtes Team und ein sehr niedriges Teammitglied, das dies getan hätte. Die meisten Menschen wollen professionell sein. Es ist leicht zu sagen, was Sie getan haben, aber ich bezweifle, dass Sie das tatsächlich tun würden. Die Leute mochten es im Allgemeinen, in ihrem Job für so gut gehalten zu werden, und mochten es nicht, ihr Team zu Fall zu bringen. Wenn die Teammitglieder das getan haben, was Sie gesagt haben, dann gibt es viel mehr Probleme mit dem Team als Ganzes als mit der individuellen Leistung. Es wäre auch nicht schwer, eine solche Person zu erkennen und viel einfacher, sie aus dem Team zu entfernen. PMs sitzen nicht einfach in einem Büro und schauen sich Kennzahlen an.
Der Kommentar war ironisch, weist aber auf einen Fehler in der Metrik hin. Ein Team, das Fehler erstellt und behebt, schneidet besser ab als ein Team, das es beim ersten Mal richtig macht. Stellen Sie sich vor, ein Entwickler hat fünf Tage damit verbracht, an einer neuen Funktion zu arbeiten. Er hat seine geschätzte Zeit bereits überschritten und möchte, dass das Feature fertig ist. Er kann einen nicht auffälligen Fehler in dieser Funktionalität erkennen. Verbringt er jetzt die zusätzliche Stunde, um den Fehler zu beheben? Oder markiert er die Arbeit als erledigt, weil er weiß, dass sie irgendwann in der Zukunft behoben wird? Wenn er weiß, dass die letztere Option dazu beitragen würde, dass die Punktzahl steigt, wird er den Fehler verlassen.
Ich bin nicht anderer Meinung, dass solche Kennzahlen wie ein Leistungsbewertungsindikator dumm sind, deshalb habe ich ausdrücklich „als Team“ angegeben. Ich meinte es im Sinne eines Schulterklopfens und nicht als Bonusverknüpfung usw. Wie mein letzter Kommentar andeutete, ist KPI zur Leistung in Bezug auf Fehler niemals nützlich. Ich habe verstanden, dass Sie mit einem Augenzwinkern gesprochen haben, aber ich denke, wir wären überrascht, wie viele PMs da draußen ein solches Szenario nicht nur für möglich, sondern auch für wahrscheinlich halten würden. Ich war lange Zeit Entwickler, ich hätte nie einen Showstopper hinterlassen, um wissentlich durch das System zu gehen - ich würde viel lieber in der Hand zum PM gehen.
@Wolf5370 - Du hast einen sehr wichtigen Punkt erwähnt. Fehlerhafte Software ist nicht dasselbe wie ein Fehler in der Hardware, wie der Stuhl in Ihrem Beispiel. Fehler in der Software können einfach behoben werden. Ein Bug ist im Grunde ein unvollendetes Feature. Es ist nicht so, dass das gesamte Projekt wegen eines Fehlers verschrottet und neu gestartet werden muss, nicht als ob es sich um ein fehlerhaftes Leiterplattendesign oder eine Autolichtmaschine handeln würde ...
Natürlich gibt es Designfehler, aber diese können kaum als Fehler bezeichnet werden. Shopstopper könnten ein Projekt beenden, wieder Bug, dies ist fast immer auf Probleme in der Analysephase (oder Scopecreep) zurückzuführen. Bugs, soweit ich sie zumindest definiere, sind nur Programmierfehler (Tippfehler, Logikfehler usw.) und keine Designfehler; kann also immer behoben werden (ob es realisierbar ist oder nicht, ist eine andere Frage).

Ein guter Entwickler ist die Art von Person, die den Testern und dem QA-Team fröhlich sagt: „Bitte – ich möchte , dass Sie Fehler in meinem Code finden“. Er ermutigt Tester aktiv, seinen Code zu knacken, damit er ihn verbessern kann. Seine Motivation ist es, all diese Fehler zu finden, bevor es für die Produktion freigegeben wird.

Wenn Sie den Entwickler dazu motivieren, die Anzahl der gemeldeten Fehler zu minimieren, glauben Sie, dass er so begeistert sein wird?

Ich denke, das Einzige, was noch schlimmer sein könnte, ist, Entwickler basierend auf der Anzahl der Fehler zu bezahlen, die sie beheben. Ich kann fast garantieren, dass es viel länger dauern wird, bis ein Code das Licht der Welt erblickt, wenn Sie auf der Grundlage der umgekehrten Anzahl der erstellten Fehler bezahlen.

Sie werden besser dran sein, eine Kultur und Prozesse zu schaffen, die weniger Fehler fördern. Brechen Sie den Build ab, Sie bekommen ein bisschen gutmütige, öffentliche Schande – und können es reparieren. Verwenden Sie TDD, um das Design und die Codeentwicklung voranzutreiben, damit Sie wissen, dass Sie Tests haben, die die Funktionen abdecken, an denen Sie arbeiten. Verwenden Sie Code-Reviews/Pair-Programming, um mehr als einen Blick auf den Code zu lenken. Dinge wie diese fördern gute Praktiken, belasten die Leute aber nicht und verursachen keine Lähmung wie „Du bekommst Geld für jeden Fehler, den du hast“.

Belohnen Sie das Team für gute Arbeit, dafür, Dinge zu erreichen – Projekte schnell mit zufriedenen Kunden auf den Weg zu bringen. Belohnen Sie Einzelpersonen dafür, dass sie ihre Fähigkeiten verbessern und zum Team beitragen.

Dies ist die einzige Frage, die zählt: Ist es gut genug?

In jeder Branche ist Perfektion teuer . Suchen Sie nach einfach zu wartendem Code. Es ist in Ordnung, wenn es Fehler gibt, solange der Stil des Programmierers es einfach macht, sie zu beheben.

Nur um die Liste dessen, was passieren wird, zu ergänzen:

  • Programmierer werden die Tatsache verbergen, dass sie einen Fehler in ihrem eigenen Code haben.

Es kommt oft vor, dass auf den zweiten Blick, vielleicht bei der nächsten Funktionserweiterung, derselbe Programmierer seinen eigenen Fehler findet. Ich nehme an, Sie können sich davor schützen, indem Sie ihnen keine Punkte berechnen.

  • Was passiert, wenn sie ihre Freunde nicht verraten wollen?

Meiner Meinung nach wollen Sie Programmierer nicht davon abhalten, Fehler aufzudecken. Und ich denke, das ist alles, was Sie mit dieser Art von Ansatz erreichen werden.

Dies kommt von einem Programmierer mit 12 Jahren Erfahrung, der aber nur in 1 Firma gearbeitet hat. Kompetente Manager sollten kein Problem damit haben, gute und schlechte Performer zu identifizieren, und dieses System scheint ein Versuch zu sein, das Management zu automatisieren.

Stärken Sie Ihre Entwickler, anstatt sie mit willkürlichen Maßstäben zu messen. Schauen Sie sich Agile an . Fehler sind kein Maßstab für gute Arbeit, Fehler passieren. Zufriedene Kunden sind ein Maß für gute Arbeit, aber Zufriedenheit lässt sich nicht wirklich messen.

Die Grundidee von Agile ist, dass die Entwickler ihre Ziele haben, die Arbeit untereinander aufgeteilt haben und in kleinen Schritten auf funktionsfähige Funktionen hinarbeiten. Sie sind direkt verantwortlich für das, was sie tun. Und das Beste daran ist, dass Sie die Punkte nicht im Auge behalten müssen!

Es gibt viele Bücher und Websites über Agile, und Ihre Entwickler werden es mögen, wenn Sie diesen Ansatz übernehmen, wenn er gut implementiert ist.

Warten Sie, das Originalplakat sagte nicht, in welche Richtung das gehen würde. Vielleicht mehr Bugs ist besser. Je mehr Bugs ein Entwickler produziert, desto produktiver ist er natürlich! Wenn sie die durchschnittliche Fehlerproduktionsrate haben, dann haben sie umso mehr Code geschrieben, je mehr Fehler sie haben.

Natürlich ist es auch keine gute Idee, mehr Fehler anzureizen, da es ziemlich einfach wäre, Fehler absichtlich einzubauen.

Ich kenne einen lustigen. Wie wäre es, wenn Sie einige Ihrer Entwickler dazu anregen, hinterhältige Fehler zu erstellen, die es durch so viele Ebenen der Codeüberprüfung, -inspektion und -tests wie möglich schaffen können? Dann können Sie Fehler in diesem Prozess aufdecken ...

Seien Sie für den Anfang, wie andere vorgeschlagen haben, vorsichtig, wenn Sie erwägen, die Vergütung an die „Leistung“ zu binden. Bevor Sie diesen Weg einschlagen, sehen Sie sich Dan Pinks TED-Vortrag über die überraschende Wissenschaft der Motivation an: http://www.ted.com/talks/dan_pink_on_motivation.html

Nicht, dass Metriken nutzlos wären. Diese Art von Metriken sind jedoch für Teams nützlicher als für Einzelpersonen. Das Team ist hier das gesamte Team, das an der Bereitstellung eines Produkts beteiligt ist: Dazu gehören Entwickler undTester (und Produktmanager, Projektmanager...). Entwicklung und Test sollten nicht gegensätzlich sein. Messen Sie viele Dinge und verwenden Sie sie, um eine ungefähre Vorstellung vom Fortschritt Ihres Teams zu bekommen. Machen Sie sich nichts vor, dass alle oder sogar einige Ihrer Metriken wirklich objektiv sein werden. Fehler sind jeweils subjektiv, daher ist eine Reihe von Fehlern noch subjektiver. Ihre Messwerte sind genauer, wenn es Anreize gibt, sie wahrheitsgemäß zu melden. Solche Anreize können immateriell sein und sind idealerweise mit einer Unternehmenskultur der Offenheit, Zusammenarbeit, des Lernens und der Verbesserung verflochten. Die meisten Metriken stellen auch Kompromisse mit Kosten oder letztendlich Gewinn dar. Die Reduzierung von Kundenvorfällen auf null ist wahrscheinlich kostenintensiv, ebenso wie eine 100-prozentige Testautomatisierungsabdeckung. Normalerweise ist die Meinung von Experten wertvoller als eine Metrik. Meine Güte, fragen Sie Ihr Team, wie sie' tun -- wenn die Unternehmenskultur gut ist, werden sie ihre Leistung wahrheitsgemäß melden. Wenn Sie einen agilen Prozess haben, tun Sie dies hoffentlich bereits in Ihren Retrospektive-Meetings. Wenn Sie Metriken in Kombination mit Expertenmeinungen und in einem Kontext offener Kommunikation und Zusammenarbeit verwenden, glaube ich, dass sie wertvoll sein können.

Zu den Metriken eines Produkt-/Dienstleistungsentwicklungsteams können gehören:

  • Geschwindigkeit (durchschnittliche Features/Story Points pro Zeiteinheit)
  • Monatliche Kosten
  • Häufigkeit der Veröffentlichung oder Ausfallzeit
  • Kosten pro Release oder Dauer/Kosten pro Ausfallzeit
  • Kundenvorfälle
  • Durchschnittliche Kosten/Schweregrad von Kundenvorfällen
  • Automatisierte Testcodeabdeckung
  • Manuelle Testcodeabdeckung
  • Manuelle Testfunktion/Story Point-Abdeckung (eher subjektiv)
  • Durchschnittliche Zeit vom QA-Fehlerbericht bis zur Lösung
  • Durchschnittliche Zeit vom Bericht des Kundenvorfalls bis zur Lösung
  • Software-Performance-Benchmarks
  • Benutzer
  • Vertrieb
  • ...
Aber Sie können all diese Metriken auch spielen.
Absolut. Aber wenn die Vergütung nicht an Leistung gebunden ist (siehe Punkt 1) und das Team dies zu seinem eigenen Vorteil tut (siehe Hauptabsatz), warum sollte es sich dann selbst betrügen? Das mag lächerlich erscheinen, aber ich habe gesehen, dass dieser grundlegende Ansatz in zwei Unternehmen (1 in Kalifornien, 1 in Texas) hervorragend funktioniert. Metriken werden einer feindseligen Kultur jedoch nicht helfen. Zuerst die Kultur, dann die Metriken.
ja, wenn sie nicht an eine Entschädigung gebunden sind, dann ja, sie sind nützlich. Solange die Metriken im Team gehalten werden. Sobald das Management beginnt, sie zu sehen, werden sie anfangen, sich mit anderen Teams zu vergleichen und sie zur Bewertung zu verwenden

Das ist ungefähr der schlechteste Weg, um irgendeine Art von Kameradschaft aufzubauen. Was wäre, wenn jemand Sie beispielsweise anhand der Anzahl schlecht geschriebener Anforderungen oder verpasster Meilensteine ​​beurteilen könnte?

Wie sieht es mit der Moral und Produktivität der Entwickler aus?

Es ist unmöglich, die Leistung nur anhand der Fehlerraten der Entwicklerarbeit zu messen.

Wieso den? Fehlerfreie Apps bedeuten nicht, dass der Entwickler einfach zu wartenden Code erstellt hat, und es garantiert nicht, dass es in seiner Arbeit kein fest codiertes Skript gibt.

Aus meiner Sicht und was ich getan habe, messe ich die Leistung von Entwicklern, indem ich den Status verwende, wann er/sie seine Arbeiten an Tester übermittelt hat, wie viele Codes an Entwickler zurückgegeben werden und wie lange sie ihre Arbeiten nach den zugehörigen Aufgaben einreichen ihnen zugeordnet.

Anreiz? Sie bekommen ihn, wenn sie das von mir vorgegebene Ziel übertreffen oder erreichen konnten. Ich habe 8 Jahre als Softwareentwickler gearbeitet, und jede Aufgabe, die ich meinen Entwicklern gegeben habe, wurde zuerst an den Schwierigkeiten und der Komplexität der Geschäftsprozesse gemessen.

Trotzdem scheint dies nicht der beste Ansatz zu sein. Einige Aufgaben, von denen Sie denken, dass sie 4 Stunden dauern, können mich 6 Stunden dauern und umgekehrt, es kann eine Aufgabe geben, von der ich denke, dass sie 3 Stunden dauert, die Sie 5 Stunden dauern kann. Softwareentwicklung ist keine exakte Wissenschaft, und ich denke, es ist ein bisschen arrogant, wenn wir unsere Schätzungen als 100%-Benchmark für andere Softwareentwickler betrachten. Alle Entwickler gehen Probleme unterschiedlich an, und das bedeutet manchmal, dass die Schätzungen abweichen können.
Als Projektleiter haben Sie das Recht, Ihre Aufgabe zu definieren, die dem Softwareentwickler zugewiesen wird. Zur Gewichtung der Aufgaben benötigen Sie einen erfahrenen Entwickler. Messen Sie die Aufgabe anhand der Fähigkeiten des Entwicklers (der die Aufgabe erhält). Es ist ein subjektives Ziel, aber es könnte der beste Ansatz sein, um eine Schätzung des gesamten Projektzeitplans zu erstellen

Zu spät zur Party, aber das würde ich an deiner Stelle tun:

  1. Basieren Sie eine Metrik auf dem gewünschten Ergebnis . Ich würde häufigere Veröffentlichungen bevorzugen. Je kürzer das Zeitintervall zwischen den Releases ist, desto höher ist der KPI. Die Nebeneffekte sind kleinere Releases (d. h. weniger Fehler), Continuous Delivery, automatisierte Tests und eine Umgebung, in der Fehler innerhalb von Minuten behoben werden können.

  2. Machen Sie es zu einer Teammetrik. Wenn Sie Personen belohnen, bitten Sie jedes Teammitglied, 10 Punkte auf seine Kollegen zu verteilen, je nachdem, wer der Leistung des Teams am meisten zuschreibt. Verteilen Sie die Belohnungen entsprechend.

  3. Fragen Sie das Team, was es für einen guten KPI halten würde, wenn Sie bedenken, dass Ihnen die Leistung des Ganzen (der Wert, den Sie Ihren Kunden liefern) wichtig ist, nicht die interne persönliche Leistung. Fragen Sie sie, wie sie eine Gesamtoptimierung anstelle einer Teiloptimierung belohnen können.