Wie man den potenziellen Wert von Refactoring misst


46

Wie können Sie bei einem alten, großen Projekt mit technischen Schulden den Nutzen von Refactoring-Code verlässlich abschätzen oder messen?

Angenommen, Sie haben einige Komponenten in einer Software-Stack-Lösung in einer älteren Sprache und einige spätere Komponenten in einer neueren Sprache geschrieben. Ein Entwicklerteam fügt dieser Lösung ständig neue Funktionen und Fehlerbehebungen hinzu.

Die Entwickler schlagen vor, dass das Ersetzen der vorhandenen alten Sprachkomponenten durch die neue Version "eine gute Sache" wäre. Diese Arbeit würde jedoch keine zusätzlichen Funktionen hinzufügen und x Entwicklertage kosten.

Ein Verkäufer schlägt vor, "eine großartige neue Funktion" hinzuzufügen. Das Unternehmen misst den Wert seines Vorschlags mithilfe einer Formel. dh Es wird dem Unternehmen über einen Zeitraum von t Jahren F Millionen Pfund einbringen und x Dev-Days-Arbeit kosten

Wie kann das Unternehmen den Refactoring-Vorschlag sinnvoll einkalkulieren? und unter welchen umständen ist es wahrscheinlich die rentabelste option für das unternehmen?



nicht wirklich? Das zahlt sich in Bezug auf die Karriere des Entwicklers aus. Ich frage nach dem Geschäftswert von Aufgaben ohne Funktionen
Ewan,

3
Nein. Was ist mit meiner Frage?
Ewan

4
@Ewan Ich denke, Gnat verwendet das "mögliche Duplikat", um auf "Sie interessieren sich vielleicht auch für" Fragen zu verlinken
Ben Aaronson

8
"Zuverlässig"? Software ist bekanntermaßen schwer abzuschätzen. Lesen Sie hierzu Folgendes : blog.hut8labs.com/coding-fast-and-slow.html . Angesichts des Follow-Ups (unten verlinkt) auch eine Lektüre. Sie sollten dies vom Standpunkt des Risikos aus besser angehen . Welches Risiko besteht beim Refactoring oder beim Umgang mit anderen technischen Schulden ? Was ist das Risiko von nicht technischen Schulden umgehen? (Beachten Sie, dass das zweite immer ein Risiko im Zusammenhang mit Wartung oder möglicherweise Fehlern darstellt.) Auf diese Weise geben Sie die Geschäftsrealitäten und -optionen an. ob sie das Risiko übernehmen wollen, liegt im Ermessen des Unternehmens.
jpmc26

Antworten:


48

Es wird dem Unternehmen über einen Zeitraum von t Jahren F Millionen Pfund einbringen und x Dev-Days-Arbeit kosten

Dabei werden die Wartungskosten, die Supportkosten, die Vertriebs- und Marketingkosten ignoriert und eine ganze Reihe von Annahmen darüber getroffen, wie die Funktion auf dem Markt eingesetzt wird.

Aber was auch immer; Ihre Frage ist klar genug, wonach Sie suchen:

Wie kann ich ein Business Case für das Refactoring erstellen?

Die Hauptsache ist, dass Zeit gleich Geld ist. Sie können direkt zu "5 Entwickler 2 Wochen = 80 Stunden * 5 Entwickler * 50 USD / Std. -> 20.000 USD" wechseln, und das ist für Geschäftsleute sinnvoll. Kluge Geschäftsleute werden bemerken, dass diese 5 Entwickler in beiden Richtungen bezahlt werden, womit Sie kontern, dass sie die 20.000 USD nicht ausgeben / sparen - sie verwenden die 20.000 USD auf die profitabelste Weise. Wie auch immer, weiter mit der Liste.

  • Effizienz - Vermutlich können Sie mit C # mehr Aufgaben erledigen als mit VB6. Bessere Werkzeuge, bessere Bibliotheken, was auch immer. Neuere Technologien sind in der Regel besser als ältere. Wenn Sie Dinge in kürzerer Zeit erledigen können, bedeutet dies, dass Sie dem Unternehmen Geld sparen.
  • Overhead - Codierung ist nicht der einzige Preis für Software. Überlegen Sie, was passiert, wenn Windows 2020 herauskommt. Wie viel Zeit und Mühe werden Sie aufwenden, um diese VB6-App daran zu arbeiten? Wie viel mehr Zeit und Mühe ist das als eine C # -App? Das spart Ihrem Unternehmen Geld.
  • Qualität - Vermutlich können Sie in C # Dinge mit höherer Qualität als in VB6 erledigen (oder mit einer saubereren Architektur oder was auch immer Ihr Refactoring-Ziel ist). Höhere Qualität bedeutet weniger Fehler. Weniger Fehler bedeuten weniger Kosten für die Behebung dieser Fehler, weniger Kosten für den Kundensupport, um diese Probleme zu beheben, weniger Kundenverluste aufgrund von Qualitätsproblemen, höhere Umsätze aufgrund des Rufs für Qualität ... alles Dollars für Ihr Unternehmen.
  • HR-Einsparungen - Seien wir ehrlich: Niemand möchte mit dieser beschissenen VB6-App arbeiten. Das bedeutet, dass mehr Leute das Unternehmen verlassen, was Zeit und Geld kostet, um sie zu ersetzen. Das bedeutet, es kostet mehr Zeit und Geld, neue Mitarbeiter einzustellen. Am schlimmsten ist jedoch, dass Entwickler mit dieser VB6-App sehr gut Karriere machen können. Diese Entwickler beschleunigen wiederum die Todesspirale der Qualitätsprobleme. Die Verkürzung von Umsatz und Einstellungszeiten spart Ihrem Unternehmen Geld. Wenn Sie selbstgefällig bleiben und Entwickler fernhalten, wird Ihr Unternehmen geschont.
  • Moral - Ebenso hassen es die Programmierer, die bereits dort sind,, in VB6 zu arbeiten. Sie werden es tun, und sie könnten es sogar gut machen. Aber es ist scheiße. Vielleicht nicht für alle, aber sicher für einige. Das bedeutet mehr Zeit für das Surfen im Internet, um die Motivation wiederzugewinnen. Es bedeutet längere Mittagessen. Es bedeutet, dass weniger Dinge erledigt werden müssen, während Ihre Programmierer länger brauchen, um sich von der blöden Arbeit zu erholen.
  • Fähigkeit - Dies gilt weniger für technologiegetriebene Refaktoren, aber für Architektur-Refaktoren. Bestimmte Code-Probleme hindern Sie aktiv daran, die coole Funktion X bereitzustellen, um eine Menge Geld zu verdienen. Vielleicht können Sie nicht skalieren. Vielleicht kommst du nicht an die Daten, um coole Informatik zu machen. Vielleicht ist der Code das Nest einer solchen Ratte, dass es unerschwinglich schwierig ist, die Arbeit tatsächlich zu tun. Wie auch immer. Manchmal sind Sie an diesem Punkt, manchmal fahren Sie direkt auf diesen Punkt zu. Es ist schwer, in die Geschäftswelt zu übersetzen, aber wenn Sie können, kann das "Problem uns daran hindern, die Chancen X, Y und Z zu nutzen", mächtig sein.

Alles in allem kommt es darauf an, dass "dieses Zeug uns dabei hilft, unsere Arbeit besser zu machen; wenn wir unsere Arbeit besser machen, können wir Ihnen mehr Geld verdienen / sparen".


1
Irgendwelche Gedanken zu "Unter welchen Umständen ist es wahrscheinlich am rentabelsten"? Es scheint, wenn Sie den Nutzen ausschließlich in Form von Kostenreduzierungen definieren, die Sie maximal zu den Gesamtkosten des Entwicklerteams nutzen. In einem großen Unternehmen dürfte dies aufgrund des neuen Features X
Ewan,

11
@Ewan - "10% Umsatzsteigerung" ist nicht großartig, wenn sie mit einer gleichen Kostensteigerung einhergeht. "10% Umsatzsteigerung" hilft nicht, wenn Ihr Konkurrent 6 Monate nach Markteinführung Sie dominiert (sodass Sie eine Umsatzsteigerung von -10% erzielen). Manchmal Funktionen sind wichtiger, aber häufiger als nicht '10% Umsatzsteigerung ist nur Scheiße bilden.
Telastyn

4
Die Beibehaltung von VB6 birgt auch ein Geschäftsrisiko: Microsoft hat die volle Unterstützung von VB6 vor Jahren eingestellt und hat seitdem die Unterstützung für "It Just Works" eingeschränkt . Die Build-Umgebung kann nur unter XP ausgeführt werden, und die Laufzeit kann in zukünftigen Windows-Versionen möglicherweise nicht mehr funktionieren. Beispielsweise muss noch offiziell angekündigt werden, dass VB6 unter Windows 10 unterstützt wird.
Dan Lyons,

1
Alle Beispiele sind fiktiv, jede Ähnlichkeit mit realen Unternehmen ist rein zufällig ...
Ewan

12

Die Frage, die Sie sich stellen sollten, ist, woher der Verkäufer weiß, dass die Funktion x Entwicklertage Arbeit kostet . Angesichts der Tatsache, dass selbst gute Projektmanager mit jahrelanger Berufserfahrung dies oft nicht beurteilen können, erscheinen solche Daten, die von einem Verkäufer stammen, äußerst ... spekulativ .

Nach meiner Erfahrung machen Verkäufer normalerweise keine Schätzungen, raten aber, wie viel zu viel für das Management oder den Kunden ist: Wenn das Management bereit ist, 50 Mannwochen Arbeit zu zahlen, aber 75 Mannwochen absolut ablehnen wird, lassen Sie es uns wissen Das Feature wird 70 Mannwochen in Anspruch nehmen, während die Neuverhandlung (was für eine echte Schätzung nicht in Frage kommt) auf 55 Mannwochen reduziert wird.

  • Auf der einen Seite haben Sie Schätzungen von IT-Experten, die etwa Folgendes aussagen:

    Laut dieser spezifischen Prüfung verschwenden wir mit einer veralteten Technologie 8.000 USD pro Tag im Vergleich zu ähnlichen Projekten ähnlicher Größe, bei denen neuere Technologien zum Einsatz kommen. Es scheint auch, dass die Migration der gesamten Codebasis zwischen 50 und 80 Mannwochen dauern wird. In dieser Zeit werden keine neuen Funktionen veröffentlicht. Es besteht auch ein Risiko von 10%, dass die Migration einer bestimmten Komponente zu 20 bis 30 zusätzlichen Arbeitswochen führt.

  • Auf der anderen Seite haben Sie Vermutungen von Verkäufern angestellt, basierend auf ihrer Hebelwirkung bei Verhandlungen mit der Person, die sie überzeugen müssen.

Es geht darum, wie einflussreich Sie in Ihrem Unternehmen sind. Kommunikation ist hier der Schlüssel, und hier überzeugen Verkäufer in der Regel IT-Experten, wenn es darum geht, dem Management (oder einem Kunden) die Vorteile einer Funktion zu erläutern.

Beachten Sie, dass Sie, wenn Ihre Schätzungen in der Vergangenheit recht genau waren, an Ansehen und Einfluss gewinnen. Wenn Ihre Schätzungen immer falsch wären, würde das Management Ihre Vorschläge wahrscheinlich ignorieren.

Für die Schätzungen ist es äußerst schwierig, hier eine wertvolle zu erstellen, da eine Vielzahl von Parametern zu berücksichtigen ist. Unter anderen:

  • Wissen Sie eigentlich, wie geschickt Ihr Team in C # im Vergleich zu VB6 ist? Basiert es auf tatsächlichen Messungen oder nur Vermutungen?

  • Hat dieses Team große Projekte in C # entwickelt? Kennen sie die Tools, die sie verwenden sollten (IDE, Debugger, Profiler usw.)? Benötigen Sie zusätzliche Lizenzen (was in der Welt von Microsoft Tausende von Dollar pro Computer bedeutet)?

  • Ist das aktuelle Projekt völlig klar und Sie können garantieren, dass es bei der Migration keine Überraschungen gibt? Ist es einfach, alles , jedes Feature neu zu schreiben , oder gibt es Überraschungen?

  • Haben Sie die Infrastruktur, die C # unterstützt? Was ist mit kontinuierlicher Integration? Was ist mit Ihrem Build-Server? Styleguides? Statische Prüfer?

  • Können Server (wenn es sich um eine Webanwendung handelt) oder Kunden-PCs (wenn es sich um eine Desktopanwendung handelt) in der Produktion die Version von .NET Framework ausführen, die Sie voraussichtlich verwenden werden?

Aber das Wichtigste ist zu wissen, warum Sie alles neu schreiben möchten. Was ist das Problem, das Sie durch ein Umschreiben lösen möchten? Produktivitätsverlust? Wie misst du es? Wie zeigen Sie dem Management diesen Produktivitätsverlust?

Wenn Sie gezeigt haben, dass Sie beispielsweise 8.000 US-Dollar pro Tag durch VB6 verschwenden (was bedeutet, dass Sie nach der Migration auf C # 8.000 US-Dollar pro Tag sparen), wie erklären Sie den Vorteil, wenn Sie jede neue Feature-Entwicklung beibehalten und Konzentrieren Sie sich auf eine vollständige Umschreibung? Was ist der Vorteil gegenüber dem progressiven Umschreiben, bei dem Sie Ihre Komponenten in kleinen Blöcken nacheinander migrieren und gleichzeitig neue Funktionen bereitstellen?


Ich meinte das Verkäufer-Beispiel nur, um zu zeigen, dass sie eine "Summe" haben, die den Wert ihres Angebots in Geld misst. Welche 'Summe' könnten die Entwickler verwenden?
Ewan

2
Nach dreißig Jahren Entwicklung von Software für den Lebensunterhalt kann ich mit Sicherheit sagen, dass Schätzungen von IT-Experten in der Realität nicht mehr zugrunde liegen als Vermutungen von Vertriebsmitarbeitern. Sie enthalten nur mehr Flanell. Das Traurige ist, dass - wenn sie sich unterscheiden - Schätzungen immer als richtig und tatsächliche Lieferungen als falsch angenommen werden.
Vince O'Sullivan

3

Zunächst müssen Sie die Entwicklungskosten für das Re-Factoring genau wie für die verkaufsgesteuerte Funktionsanforderung schätzen.

Es mag schwierig sein, genau zu sein, wenn es sich um eine große Aufgabe handelt. Vorausgesetzt, Sie haben ausreichend Erfahrung mit den beiden Technologien, sollte dies jedoch machbar sein.

Zweitens benötigen Sie eine Schätzung der Kosten für das Nicht-Re-Factoring. Wenn Sie die Schätzungen für mich vornehmen würden, würde ich ein gewisses Maß an Metriken erwarten. Zum Beispiel die Differenz zwischen den durchschnittlichen Entwicklungskosten für VB-Code und für C # -Code über ein Viertel. Oder solche. Kommt natürlich darauf an, wie genau du das verfolgst.

Mit diesen beiden Zahlen können Sie die Amortisationszeit abschätzen, die Ihnen das Re-Factoring bietet, dh ab wann wandelt sich das Re-Factoring von Nettokosten zu Nettogewinn.

Ich kann nur raten, wie überzeugend ein bestimmtes Ergebnis sein würde. Wenn es jedoch weniger als ein Jahr ist, wird es wahrscheinlich ziemlich stark sein, viel mehr als 2 Jahre, dann können Sie gut kämpfen.

Darüber hinaus lohnt es sich wahrscheinlich, andere Dimensionen hinzuzufügen, um Ihren Fall zu erstellen. Eine, die ich in der Vergangenheit verwendet habe, ist zu sehen, ob in Ausstiegsinterviews die Technologie als Treiber angegeben wurde. Wenn ja, können Sie argumentieren, dass das Re-Factoring Personal behalten wird (Einstellung und Schulung sind sehr teuer).

Natürlich können Sie diese Dinge ohne stichhaltige Beweise argumentieren, aber ich finde, dass dies einen großen Unterschied für die Auswirkungen des Falls bedeuten kann.


2

Der Wert des Refactorings kann auf verschiedene Arten gesteigert werden.

Sie können später weitere Änderungen vornehmen, sodass die Ausführung der X-Tage, die diese Funktion benötigt hätte, nun 2 / 3X Tage dauert. Um die agile Terminologie zu verwenden, wird die Geschwindigkeit erhöht.

Die aufgeführte explizite Änderung würde im Laufe der Zeit helfen, da Sie keine Entwickler mit VB6-Erfahrung mehr pflegen müssen, sondern nur noch diejenigen mit C # -Erfahrung.

Es hilft auch auf andere, weniger greifbare Art und Weise, wie Mitarbeiterbindung und Rekrutierung. Wäre ein Job mit C # und VB6 mehr oder weniger attraktiv als ein Job mit C #? Würden Sie mehr oder weniger wahrscheinlich einen Job annehmen oder bei einem Job bleiben, der auf einer netten oder miesen Codebasis arbeitet?


2

Ich denke, der Punkt, den die anderen Antworten verfehlen, ist, dass Sie die Kosten für das Refactoring anhand der Einnahmeverluste durch das Nicht-Refactoring messen müssen.

Refactoring, um den Code zu ändern, ist Zeitverschwendung. Es muss Wert auf den Tisch bringen. In diesem Zusammenhang meine ich nicht eine Stunde Refactoring einer Problemklasse, sondern das Haupt-Refactoring wie das Wechseln in eine andere CLR-Sprache, wie Sie es in Ihrem Beispiel verwendet haben.

  • Wenn wir weitermachen, was wir tun, verpassen wir dann etwas? Gibt es ein schäbiges altes Design, das uns davon abhält, Wert zu erkennen? Wenn wir zum Beispiel ein Feature hinzufügen möchten, ist es dann so schwierig, dass die Implementierung beispielsweise 100 Stunden dauert, gegenüber 50 Stunden für die Umgestaltung und 25 Stunden für die Implementierung des neuen Designs?

  • Ist der bestehende Code mit technischen Schulden verbunden , die uns Geld kosten? Ist dieser beschissene alte Code die Quelle von Fehlern? Arbeiten wir am Ende kostenlos, um Probleme zu beheben? Niemand mag es, lukrative abrechnungsfähige Stunden kostenlos zu verschenken.

  • Sind die Kosten für das Refactoring gleich oder geringer als die Kosten für das Nicht-Refactoring?

  • Ist es möglich, die Kosten zu amortisieren, indem ein kleines Team von Rockstars den Code überarbeitet, der die meisten Probleme verursacht? Können wir den Refactor auf Releases verteilen? Überall gibt es kleine Ineffizienzen: Können wir mit dieser zusätzlichen Arbeit sozusagen "die Lücken füllen"?


1

Vorteile eines überarbeiteten Systems

Sie machen ein Business Case für das Refactoring, indem Sie die betriebswirtschaftlichen Vorteile zwischen Tun und Nicht-Tun vergleichen. Dies bedeutet entweder eine Reduzierung der aktuellen realen Kosten oder eine Erhöhung des zukünftigen realen Geldzuflusses.

Die wichtigsten Budgetposten, die vom Refactoring betroffen sind, sind folgende:

  • Wartungskosten - Wenn das derzeitige System ein zerbrechlicher Haufen Spaghetti ist und es in der Praxis zu beobachten ist, dass die Behebung kleiner Fehler (sowohl in der Entwicklung als auch im Betrieb) eine große Menge an Arbeitsstunden in Anspruch nimmt, ist damit zu rechnen, dass die Kosten für solche Fehler steigen Die Wartung wird für ein "richtig umgestaltetes" System geringer sein. Sehen Sie sich an, wie hoch Ihre jährlichen reinen Wartungskosten sind und wie sie sich nach dem Umschreiben realistisch ändern können.
  • Kosten für das Hinzufügen neuer Funktionen - Auch wenn das Schreiben neuer Funktionen aufgrund des aktuellen Systemdesigns und der aktuellen Systemstruktur unangemessen zeitaufwändig ist, kann ein Umschreiben zu Einsparungen führen. Sehen Sie sich Ihr geplantes Budget für neue Funktionen an, aber seien Sie realistisch. Wenn Sie behaupten, dass Sie eine 50% ige Verbesserung sehen, können Sie davon ausgehen, dass Sie Funktionen in x Mannmonaten entwickeln, für deren Realisierung früher 2 * x Mannmonate benötigt wurden. Solche Versprechungen können schwer zu halten sein.

  • Auswirkungen der Softwarequalität auf den Vertrieb - Wenn das aktuelle System trotz angemessenem Wartungsaufwand häufig vom Kunden sichtbare Probleme verursacht, z. B. Abstürze oder Ausfallzeiten, kann ein Umschreiben eine Lösung sein. WENN dies ein großes Problem ist, können dieselben Verkäufer den Wert eines "Merkmals", das als "stabileres Produkt" bezeichnet wird, quantifizieren.

Wenn die drei oben genannten Punkte nicht die erwarteten Kosten für das Neuschreiben (und mehr) erreichen, entsprechen die Opportunitätskosten für die Ausgabe von x Entwicklertagen für nicht vorhandene Features dem Wert dieser Features, der höher ist als die reinen Kosten für x Entwickler -Tage), dann fürchte ich, dass es das ist - die erwarteten Einsparungen rechtfertigen das Umschreiben nicht.

Auch wenn Ihre Roadmap nicht den Bedarf an neuen Funktionen aufweist, sollten die Einsparungen in einer Form vorliegen , in der 10 Personen für alle erforderlichen Aufgaben benötigt wurden. Nach dem Umschreiben müssen wir diese jedoch bearbeiten Das gleiche kann man mit nur 6 Leuten machen . Wenn Sie mehr Entwicklungsprojekte "verkaufen" können als Entwickler, können Sie durch die Steigerung der Effizienz mehr Dinge entwickeln. Wenn das Geschäft mit den aktuellen Ressourcen jedoch bereits alle Dinge entwickeln kann, die zusätzlichen Wert bringen, ist dies der einzige finanzielle Vorteil kann von weniger Menschen oder mit billigeren Menschen kommen.


0

Der Wert des Refactorings lässt sich wie folgt messen: Derzeit kostet das neue Feature x 5 Entwickler 2 Wochen. Wenn wir alte Komponenten überarbeiten, werden die Kosten für neue Funktionen um geschätzte 20% gesenkt. Daher kostet das neue Feature x in 2 Wochen nur 4 Entwickler.

Refactoring ist eine Investition in die Reduzierung der Kosten zukünftiger Entwicklungen. Wenn Sie dieses Argument nicht für Ihr Refactoring vorbringen können, gibt es wahrscheinlich keinen Geschäftsgrund dafür.


Ich denke, Sie sind an einem entscheidenden Punkt angelangt, um Features billiger / schneller zu machen. Ich denke, dieses Problem ist wertvoller als jede Menge Kosteneinsparungen
Ewan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.