Frage

Im Moment arbeite ich mit einem ziemlich alten Produkt, das mit einer Vielzahl von technischen Schulden von armen Programmierern und armen Entwicklungspraktiken in der Vergangenheit aufgebürdet worden ist. Wir beginnen, besser zu werden und die Schaffung von technischen Schulden hat sich deutlich verlangsamt.

habe ich die Bereiche der Anwendung identifiziert, die in einem schlechten Zustand sind, und ich kann die Kosten für die Festsetzung jene Bereiche schätzen, aber ich habe eine harte Zeit, die Schätzung der Return on Investment (ROI).

Der Code wird leichter sein, zu warten und wird leichter sein, in der Zukunft zu verlängern, aber wie kann ich mich über einen Dollar Figur auf diese setzen?

Ein gutes Aussehen zu starten wie in unser Bug-Tracking-System zurück und Kosten basierend auf Bugs Schatz und Funktionen im Zusammenhang mit diesen „schlechten“ Bereichen. Aber das scheint zeitaufwendig und kann nicht der beste Prädiktor von Wert sein.

Hat jemand eine solche Analyse in der Vergangenheit durchgeführt und haben einen Rat für mich?

War es hilfreich?

Lösung

Pflege-Manager über $ durch Wachstum machen (in erster Linie beispielsweise neue Features, die neuen Kunden zu gewinnen) und (zweite) durch den Prozess-Lebenszyklus zu optimieren.

Mit Blick auf Ihrem Problem, Ihr Vorschlag fällt in der zweiten Kategorie: dies wird zweifellos hinter dem Tor fällt # 1 (und somit nach unten bekommen priorisiert noch , wenn dieses Geld sparen könnte ... weil Geld zu sparen < strong> bedeutet Geld ausgeben (die meisten der Zeit zumindest, -)).

Jetzt , ein $ Abbildung auf der „schlechten technischen Schulden“ Indienststellung einer positiveren Spin umdrehte werden könnte (vorausgesetzt, dass die folgenden in Ihrem Fall gilt): "Wenn wir in Nacharbeiten Komponente investieren X, könnten wir Merkmal Y schneller einführen und damit Z mehr Kunden“erhalten.

Mit anderen Worten: bewertet die Kosten der technischen Schulden gegen Kosten für verlorene Geschäftsmöglichkeiten .

Andere Tipps

Sonar hat ein großes Plugin ( technische Schulden Plugin ) ihren Quelltext zu sehen für eine solche Metrik zu analysieren. Während Sie es nicht speziell für Ihren Build in der Lage sein, zu verwenden, da es ein Maven-Tool ist, sollte es einige gute Metriken liefern.

Hier ist ein Ausschnitt ihres Algorithmus:

Debt(in man days) =
    cost_to_fix_duplications +
    cost_to_fix_violations + 
    cost_to_comment_public_API +
    cost_to_fix_uncovered_complexity + 
    cost_to_bring_complexity_below_threshold


 Where :

 Duplications = cost_to_fix_one_block * duplicated_blocks

 Violations   = cost_to fix_one_violation * mandatory_violations

 Comments     = cost_to_comment_one_API * public_undocumented_api

 Coverage     = cost_to_cover_one_of_complexity * 
                         uncovered_complexity_by_tests (80% of
                         coverage is the objective)

 Complexity   = cost_to_split_a_method *
                         (function_complexity_distribution >=
                          8) + cost_to_split_a_class *
                         (class_complexity_distribution >= 60)

Ich glaube, Sie auf dem richtigen Weg sind.

Ich habe das nicht gehabt zu berechnen, aber ich habe ein paar Gespräche mit einem Freund, der eine große Software-Entwicklungsorganisation mit vielen Legacy-Code verwaltet habe.

Eines der Dinge, die wir besprochen haben, ist einige grobe Aufwand Metriken Erzeugung von VCS Commits zu analysieren und mit ihnen eine grobe Schätzung der Programmierer Stunden aufzuteilen. Dies wurde inspiriert von Joel Spolsky Evidenzbasierte Scheduling .

solche Data Mining tun Sie auch Clustering von erlauben würde, zu identifizieren, wenn Code aufrechterhalten wird und vergleichen Sie die Fertigstellung Fehler in der Tracking-System (es sei denn, Sie bereits mit einer engen Integration zwischen den beiden und genaue Aufzeichnungen gesegnet sind).

Die richtige ROI muss die vollständige Rückkehr berechnen, so dass einige Dinge zu beachten sind: - verringerte Kosten für die Wartung (offensichtlich) - Opportunitätskosten für das Unternehmen von Ausfallzeiten oder vermisste neue Funktionen, die nicht rechtzeitig für eine Veröffentlichung hinzugefügt werden könnten - Fähigkeit, neue Produktlinien aufgrund Refactorings

zu erzeugen,

Denken Sie daran, wenn Sie eine Regel haben Daten für die Ableitung, können Sie Argumente über genau wie , um die Dinge zu berechnen, aber zumindest haben Sie einige Zahlen Samen Diskussion!

1 für jldupont Fokus auf verlorene Geschäftsmöglichkeiten.

Ich schlage vor, darüber nachzudenken, diese Möglichkeiten als vom Management wahrgenommen. Was sie denken, wirkt sich das Umsatzwachstum - neue Features, die Zeit auf den Markt, die Produktqualität? In Bezug Schulden paydown auf diese Treiber werden verstehen, hilft dem Management der Gewinne.

Die Konzentration auf Management Wahrnehmungen helfen Ihnen falsche Numerierung vermeiden. ROI ist eine Schätzung, und es ist nicht besser als die in seiner Einschätzung getroffenen Annahmen. Das Management wird ausschließlich quantitative Argumente vermuten, weil sie wissen, dass es einige qualitative dort irgendwo. Zum Beispiel über die kurzfristig die tatsächlichen Kosten für Ihre Schulden paydown ist die andere Arbeit die Programmierer nicht, anstatt die Cash-Kosten für die Programmierer zu tun, weil ich Sie gehen zu mieten und trainieren neue Mitarbeiter nur für diese Zweifel . Sind die Verbesserungen in zukünftigen Entwicklungszeit oder Qualität wichtiger als kennzeichnet diese Programmierer sonst wäre das Hinzufügen?

Auch, stellen Sie sicher, den Horizont verstehen, für die das Produkt verwaltet wird. Wenn das Management nicht von jetzt etwa zwei Jahren zu denken, werden sie nicht über die Vorteile kümmern, die nicht für 18 Monate erscheinen wird.

Schließlich reflektiert die Tatsache, dass das Management der Wahrnehmung dieses Produkt erlaubt hat zu diesem Zustand in erster Linie zu bekommen. Was sich geändert hat, dass das Unternehmen mehr Aufmerksamkeit auf technische Schulden machen würde? Wenn die Differenz Sie - sie ist ein besserer Manager als Ihre Vorgänger - bedenken Sie, dass Ihr Management-Team nicht zu denken über diese Dinge verwendet wird. Sie haben ihren Appetit für sie zu finden, und konzentrieren sich auf jene Elemente, die über Ergebnisse, die sie kümmern liefern. Wenn Sie das tun, werden Sie gewinnen Glaubwürdigkeit, die Sie sie denken bekommen über weitere Änderungen verwenden können. Aber die Wertschätzung der Gewinne könnte sein, während in wächst.

Ich kann nur sagen, wie dies in einem iterativen und inkrementellen Prozess empirisch zu tun.

Sie müssen Metriken sammeln Ihre demonstriert beste Kosten / Geschichte-Punkt zu schätzen. Vermutlich stellt dies Ihr System nur nach dem ersten architektonischen Churn, als die meisten Design-trial-and-error getan wurde, aber Entropie hat die wenigste Zeit zu verursachen Zerfall hat. Finden Sie den Punkt in der Projekthistorie, wenn Geschwindigkeit / Teamgröße am höchsten ist. Verwenden Sie dies als Ihre Kosten / Punkt der Basislinie (Null-Schulden).

Im Laufe der Zeit als technische Schulden ansammelt, die Geschwindigkeit / Teamgröße beginnt zu verringern. Die prozentuale Abnahme dieser Zahl in Bezug auf Ihre Baseline kann in „Interesse“ übersetzt wird auf jeden neue Geschichte Punkt bezahlt. (Dies ist wirklich Interesse an technischen bezahlt und Wissen Schulden)

Diszipliniert refactoing und Glühen bewirkt, dass die das Interesse an technischen Schulden zu einem bestimmten Wert stablize höher als den Baseline. Betrachten Sie das als den stationären Zustand Interesse der Product Owner auf der technischen Schulden im System bezahlt. (Das gleiche Konzept gilt für Wissen Schulden).

erreichen Einige Systeme den Punkt, wo die Kosten + Zinsen auf jeder neuen Geschichte Punkt den Wert des Merkmalspunkt überschreitet entwickelt. Dies ist, wenn das System bankrott ist, und es ist Zeit, das System von Grund auf neu zu schreiben.

Ich denke, es ist möglich, Regressionsanalyse zu necken auseinander technischen Schulden und Wissen Schulden zu verwenden (aber ich habe es nicht ausprobiert). Zum Beispiel, wenn Sie diese technische Schulden übernehmen korreliert eng mit einigen Code-Metriken, z.B. Code-Duplizierung, könnten Sie den Grad bestimmen das Interesse gegenüber Wissen Schulden wegen technischer Schulden steigt bezahlt.

Als meist allein oder gemeinsam mit kleinen Team Entwickler dies aus meinem Bereich ist, aber für mich eine großartige Lösung, um herauszufinden, wo der Zeit verschwendet wird, ist sehr, sehr Zeitnehmung detailliert, beispielsweise mit einem praktischen Aufgabe-Bar Tool wie < a href = „http://www.allnetic.com/“ rel = „nofollow noreferrer“> diese eine , die selbst herausfiltern können, wenn Sie auf die Toilette gehen, und kann alles in XML exportieren.

Es kann umständlich auf den ersten, und eine Herausforderung an ein Team vorstellen, aber wenn Ihr Team alle fünfzehn Minuten anmelden können sie aufgrund eines Fehlers, Fehler oder Missverständnis in der Software verbringen, reichern Sie eine Basis beeindruckend, real -life Daten auf, welche technischen Schulden kostet eigentlich jeden Monat in Löhne.

Das Werkzeug I verknüpft ist mein Favorit, weil es einfach tot ist (nicht einmal eine Datenbank erfordern) und bietet Zugang zu jedem Projekt / Stück durch eine Taskleiste Symbol. Auch die Eingabe zusätzlicher Informationen über die durchgeführten Arbeiten kann es geschehen, und Zeitnehmung wird buchstäblich in Sekunden aktiviert. (Ich bin nicht mit dem Verkäufer zusammen.)

Es könnte einfacher sein, die Menge zu schätzen es gekostet hat Sie in der Vergangenheit . Sobald Sie das getan haben, sollten Sie mit einer Schätzung für die Zukunft mit einer Reichweite und Logik sogar Ihren Chefs der Lage sein, zu kommen verstehen kann.

Das wird gesagt, ich habe nicht viel Erfahrung mit dieser Art der Sache hat, einfach weil ich noch nie einen Manager bereit gesehen, so weit gehen in Code bis zur Festsetzung. Es war schon immer nur gewesen etwas, das wir beheben, wenn wir schlecht Code ändern müssen, so Refactoring effektiv eine versteckte Kosten auf alle Änderungen und Fehlerbehebungen ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top