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?
Antworten:
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:
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.
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".
quelle
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:
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?
quelle
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.
quelle
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?
quelle
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"?
quelle
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:
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.
quelle
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.
quelle