Joel Spolsky sagte in einem seiner berühmten Beiträge:
Der schlimmste strategische Fehler, den ein Software-Unternehmen machen kann: Den Code von Grund auf neu schreiben.
Chad Fowler schrieb:
Sie haben die Videos, die Weblog-Posts und den Hype gesehen und Sie haben beschlossen, Ihr Produkt in Rails (oder Java oder .NET oder Erlang usw.) erneut zu implementieren.
In acht nehmen. Dies ist ein längerer, härterer und störanfälligerer Weg als erwartet.
Warst du jemals an einem BIG Rewrite beteiligt?
Ich interessiere mich für Ihre Erfahrungen zu diesem tragischen Thema und insbesondere für jede größere Umschreibung, die (wenn überhaupt) erfolgreich abgeschlossen wurde.
Antworten:
Ich war in meiner Karriere an einigen Umschreibungen beteiligt, und sie waren alle Katastrophen. Ich denke, dass sie alle aus den gleichen Gründen scheitern
quelle
Rewrites können sehr erfolgreich sein, wenn Sie sie richtig setzen. Ich weiß nicht, ob diese Ihrer Schwelle für "BIG" (TM) -Projekte entsprechen, aber lassen Sie mich Ihnen einige der erfolgreicheren Umschreibungen beschreiben.
Projekt 1
Die Firma, für die ich arbeitete, verfügte über ein System zum Bedrucken von Regalstreifen, mit dem die Etiketten, die Sie in den Verkaufsregalen sehen, aus einem sogenannten Planogramm erzeugt wurden . Das Planogramm wurde in einer Industriestandardsoftware erstellt, und unsere Tools haben dieses Dokument gelesen, um die Regalstreifen mithilfe einer Vorlage für das Zielgeschäft zu erstellen. Die Templating-Software war ein Durcheinander mit verschachtelten Finite-State-Maschinen, die sich über mehrere Klassen und drei DLLs erstreckten. Als die Zeit gekommen war, um den (damals) zum Patent angemeldeten Ansatz für Steckbretter umzusetzen, war klar, dass der aktuelle Code nicht unterstützen konnte, was wir tun wollten.
Lösung: Wir haben das Umschreiben auf die Template-Engine beschränkt. Wir haben das richtige OO-Design verwendet, um die aktuellen Anforderungen zu erfüllen und die neuen Anforderungen an Steckbretter zu erfüllen. Die Zeit für das Umschreiben betrug 1 Monat. Wenn wir die gesamte Toolkette komplett neu geschrieben hätten, hätte das weit über ein Jahr gedauert - aber das mussten wir nicht.
Projekt 2
Eine von unserem Team von Grund auf erstellte Webanwendung entwickelte sich allmählich zu ihrem ursprünglichen Design. Unser Kunde hatte auch eine Reihe neuer Anforderungen, die die Website für unsere Benutzer viel besser machen und, wenn Sie so wollen, "Web 2.0" -kompatibler machen. Während wir unser bestehendes Design in ein Gerüst verwandeln konnten, war die Wartung ein Albtraum. Wir kannten die Anwendung genau und wussten, welche Teile wir vorlegen mussten und welche Teile als Teil der neuen Version weggingen.
Lösung: Es dauerte 3 Monate, bis unser Team fertig war - es war nicht trivial. Das Endprodukt war schneller, skalierbarer und für die Endbenutzer angenehmer. Wir haben die Erwartungen unserer Kunden übertroffen. Das heißt, wir mussten unser Team aufteilen, damit die unmittelbareren Fehlerbehebungen und Band-Aid-Patches auf dem vorhandenen System durchgeführt werden konnten, während die andere Hälfte auf dem neuen System arbeitete. Wir haben umfangreiche Tests durchgeführt und diese früh in den Prozess einbezogen. Der Grund, warum dies so gut geklappt hat, ist, dass wir diese Anwendung und unseren Kunden sehr gut kannten.
Projekt 3
Ich muss hier einen Fehler einfügen. Wir unterstützten einen Kunden, der ein Informationsmanagement-Tool für den Einsatz in Katastrophen- / Krisensituationen benötigte. Wir haben eine Java-Swing-Anwendung geerbt, die die ursprünglichen Entwickler geschrieben haben, ohne Swing wirklich zu verstehen. Damit meine ich, dass sie den Empfehlungen von Sun für den Umgang mit Swing und die ordnungsgemäße Verwaltung der Benutzeroberfläche nicht gefolgt sind. Infolgedessen würden Sie in unendliche Ereignisschleifen geraten und andere seltsame und schwer zu verfolgende Probleme. Infolgedessen war es mit Fehlern, Problemen mit der Benutzeroberfläche usw. beladen. Dies war eine sehr komplizierte Anwendung. Um unsere geistige Gesundheit zu bewahren, haben wir versucht, die schlecht geschriebene Swing-App in eine gut geschriebene Swing-App umzuschreiben.
Lösung: Wir haben die Umschreibung in ungefähr 4,5 Monaten abgeschlossen, als wir 3 Monate veranschlagt hatten. Die Anwendung schnitt sowohl in der Benutzeroberfläche als auch bei der Datenmenge, mit der sie umgehen konnte, besser ab. Dann geschah der Tsunami im Jahr 2004. Die schiere Größe der Anzahl der Personen, die sie verfolgen mussten, zeigte, dass Swing die falsche Technologie für das war, was sie wirklich brauchten. Wir konnten mit unserer Leistungsoptimierung nicht Schritt halten und sie gaben das Tool schließlich zugunsten einer zusammengeschusterten Web-App auf, die von dem von ihnen betriebenen Oracle-Team erstellt wurde. Sicher konnten wir das, was wir getan haben, auf der Grundlage unseres damaligen Wissens rechtfertigen, aber das Umschreiben war nicht aggressiv genug, und wir konnten unserem Kunden nicht mitteilen, dass auch seine Anforderungen an die Anzahl der Personen, die möglicherweise verfolgt werden müssen, zu hoch waren niedrig.
Fazit
Neufassungen sind manchmal notwendig, und sie können erfolgreich abgeschlossen werden , wenn Sie es richtig planen. Sie können mit gezielten Umschreibungen für Teile eines Systems mehr erreichen als mit Umschreibungen für den gesamten Verkauf. Schließlich ist das Umschreiben selbst nicht unbedingt der Grund für das Scheitern eines Projekts. Während wir niemals hellsichtig sein können, können wir uns einige Worst-Case-Szenarien ausdenken. Ich habe gelernt, meine Systeme so zu gestalten, dass sie das zweifache des mir in den Sinn kommenden Worst-Case-Szenarios unterstützen. Im Falle des Krisenmanagementsystems war das nicht genug - die tatsächlichen Zahlen waren das 20-fache des uns gegebenen Worst-Case-Szenarios. Aber das war nicht das schlimmste Szenario, an das wir denken konnten.
quelle
Ich war an mehreren Umschreibungen von VB6 auf .NET beteiligt. In 2 Fällen verliefen die Umschreibungen reibungslos und wir waren tatsächlich vorzeitig fertig. Das andere Umschreiben dauerte länger als erwartet, wurde jedoch ohne größere Probleme durchgeführt.
In unserem speziellen Fall war das Umschreiben NICHT die schlechteste Entscheidung, die unser Unternehmen treffen konnte. Die Endergebnisse waren tatsächlich viel stabiler als die Originale und brachten uns an einen viel besseren Ort.
quelle
Eine der größten Fallen beim vollständigen Umschreiben eines bestehenden Systems ist der Gedanke: "Wir müssen nicht spezifizieren, was das neue System tun muss - es ist sehr einfach, es muss nur genau das tun, was das alte System tut!" .
Das Problem ist, dass höchstwahrscheinlich niemand genau weiß, was das alte System tut, und dass Sie unzählige Stunden damit verbringen, Ihr neues System so zu betreiben, wie es nach Ansicht verschiedener Benutzer des alten Systems funktionieren sollte. Die ursprünglichen Anforderungen des alten Systems sind höchstwahrscheinlich ebenfalls nicht verfügbar.
quelle
Meins ist eine "Erfolgsgeschichte". Mein Projekt umfasste einen primären Standort mit 4 unabhängig verwalteten / geschriebenen Satellitenstandorten (Subdomains mit unterschiedlichen Anwendungen). Wir hatten 4 primäre Benutzerbasen (alle in separaten aktiven Verzeichnissen) und keine hatte ein gemeinsames Authentifizierungssystem. 3 waren gut etablierte und Silo-Anwendungen und der 4. Satellit war brandneu und hatte einen Großteil seiner Codebasis von unserer am besten etablierten Site kopiert.
Ziel: Implementierung eines unternehmensweiten Identitätssystems, mit dem Konten über 4 Domänen hinweg authentifiziert und Konten (mit Self-Service) in einer der Domänen vollständig verwaltet werden können. Da .Net bereits auf den Satelliten implementiert war, musste die klassische ASP-Site, die als "Einstieg" diente, umgeschrieben, die Identitätsverwaltung hinzugefügt und alle Sites einem Regressionstest unterzogen werden, um sicherzustellen, dass keine Dienste beeinträchtigt wurden.
Ressourcen: 3 Hauptarchitekten - Programmierer, Identitätsmanagement, Projektmanager. Ca. 20 Entwickler, 10 Analysten, 10 Tester.
Zeit bis zur Fertigstellung (Beginn bis Ende): 1,5 Jahre
Starterfolg: Fast gescheitert
Langlebigkeitserfolg: Genial
Ich war der Identitätsverwaltungsarchitekt, also entwarf ich die Datenbanken, Subsysteme und logischen Schnittstellen, über die alle Satelliten interagieren würden. Der "Programmierer" -Architekt war ein leitender Entwickler mit umfangreichen Geschäftskenntnissen aller Satelliten und Erfahrungen mit den Anwendungen und deren Entwicklung bis zu diesem Zeitpunkt.
Nach mehreren Monaten des Zusammentreffens von Anforderungen mit etwa 50 verschiedenen Mitarbeitern aus verschiedenen Abteilungen in unserem Unternehmen gelang es uns, die logische Architektur auszubügeln und den Code herauszuholen. Aufgrund der Art der Änderung mussten wir unsere eigene Website und alle darin enthaltenen Funktionen in .Net umschreiben. In einigen Fällen handelte es sich lediglich um ein Refactoring. In vielen Fällen umfasste dies ein vollständiges Umschreiben der ihn umgebenden Prozesse. In 2 Fällen haben wir die ursprüngliche Funktion einfach als unwichtig aufgegeben. Wir haben zwei Fristen verpasst (haben aber die ursprüngliche Frist, die ich vorgeschlagen hatte, knapp eingehalten). Am Starttag funktionierte nichts. Wir starteten an einem Samstag, so dass die Auswirkungen recht gering waren, aber ich verbrachte den ganzen Tag damit, Protokolle zu durchforsten, Teile neu zu schreiben und Serverlasten zu bewerten. Weitere Tests hätten vielleicht geholfen.
Am Ende des ersten Tages waren alle Sites in Betrieb und alles funktionierte (ich würde sagen, ein nomineller Erfolg). In den letzten 2,5 Jahren war alles ein voller Erfolg. Alle unsere Sites auf einer gemeinsamen Architektur mit einer gemeinsamen Framework-Basis zu haben, hat die Entwicklung und die entwicklerübergreifende Arbeit erheblich erleichtert. Funktionen, die ich vor 2,5 Jahren (während unseres Umschreibens) in unsere Site geschrieben habe, wurden seitdem von einigen der Satellitensilos gesehen / übernommen.
Wir haben die Protokollierung, die Benutzerverfolgung und die Verfügbarkeit erhöht, eine einzigartige Anwendung, die für die Authentifizierung / Autorisierung / Identifizierung verantwortlich ist. Die Satellitensilos können sich vollständig auf ihre Anwendungen konzentrieren und darauf vertrauen, dass bei der Identitätsverwaltungsanwendung Authentifizierungs- / Autorisierungsprobleme bestehen.
Unser Projekt war sehr frustriert, schmerzhaft und katastrophal. Am Ende hat es sich ausgezahlt und noch einiges mehr. Ich stimme zu 100% mit Joel Spolskys Einschätzung überein, dass Änderungen in der Regel vorgenommen werden, aber es gibt immer Ausnahmen. Wenn Sie über ein Umschreiben nachdenken, müssen Sie nur sicherstellen, dass es absolut das ist, was Sie brauchen. Wenn dies der Fall ist, seien Sie auf alle damit verbundenen Schmerzen vorbereitet.
quelle
Ich bin gerade mit einem großen Umschreiben des Codes beschäftigt ... das einzige Problem ist, dass ich der einzige bin, der daran arbeitet! Die Wartungskosten für unsere aktuelle Software sind enorm, es gibt viele Fehler, und wir haben einen FT-Mitarbeiter, der sie wartet, sodass wir uns entschlossen haben, unsere eigene zu bauen.
Es ist viel langsamer als ich erwartet hatte, aber letztendlich denke ich, dass es so viel besser sein wird, weil wir unsere eigene Codebasis haben, so dass alle Änderungen, die sie in Zukunft wollen, einfach implementiert werden können (die Software muss sich häufig ändern, um mitzuhalten) aktuelle Zeiten). Außerdem nehmen wir einige wichtige Änderungen am Design vor, während wir es umschreiben.
quelle
Ich habe an einer vollständigen Umschreibung in meinem vorherigen Job teilgenommen. Und wir waren sehr froh, das getan zu haben. Sagen wir einfach, dass die Codebasis manchmal so faul ist, dass es besser ist, von vorne zu beginnen.
Es war eine interne Anwendung - in der Tat die wichtigste Geschäftsanwendung.
Wir haben das alte System beibehalten, als wir Version 2 geschrieben haben. Wenn ich mich recht entsinne, haben wir ungefähr ein Jahr gebraucht (zwei Programmierer und dann ein dritter). Wir mussten die Datenbank jedoch nicht berühren, sodass zumindest die Datenmigration kein Problem darstellte.
quelle
Es hängt alles ab. In meinem Fall bin ich Joel Spolskys Rat gefolgt und ich habe mich geirrt . Es ging um eine Versicherungswebsite. Die Seite war schrecklich und hier ist, was ich getan habe und was ich hätte tun sollen:
Schlechte Strategie: Ich habe eine Gruppe von 4 Schülern beaufsichtigt, um:
Es hat 2 Monate gedauert. Dann haben wir die Seite neu gestaltet. Dann haben wir es mehrsprachig gemacht. Alles in allem mussten wir einen großen Teil des beschissenen Codes behalten und die Datenbankstruktur blieb unverändert. Also arbeite ich seit einem Jahr immer noch an beschissenen Sachen und sie werden nie fertig sein, bis wir uns für eine komplette Neufassung entscheiden, was eigentlich nie passieren wird.
Gute Strategie:
Zeit, die es gedauert hätte: zwei Monate ( vielleicht weniger ).
Also, meine letzten Worte: Es hängt alles von der Komplexität der Dinge ab, die Sie umschreiben müssen .
Zögern Sie nicht, meinen Beitrag zu korrigieren, damit er richtig Englisch wird. Vielen Dank
Olivier Pons
quelle
Eine Firma, für die ich gearbeitet habe, hat einen großen Umgestalter der Codebasis gestartet.
Die Hälfte des Teams sollte am Refactor arbeiten und die andere Hälfte das bestehende Produkt weiter pflegen und verbessern.
Wie Sie sich vorstellen können, kam der Refactor nie wirklich an einen Punkt, an dem etwas funktionierte - es war nur ein ständiger Prozess, der nie etwas für sich zu beweisen hatte.
Die Idee war, dass es besser wäre, mit der überarbeiteten Codebasis zu arbeiten, und wir konnten einfach die neuen Funktionen "vorbeischauen", die das Team dem vorhandenen Produkt hinzugefügt hatte, nachdem es fertig war, und "aufholen".
Aber es war der Untergang des Unternehmens.
quelle
Ich habe die letzten 3 Jahre einen großen Umbau gemacht. Ursprünglich haben wir das Projekt auf 2 Jahre geschätzt. Die Grundidee war, die Hardware zu ersetzen, ein vorhandenes Betriebssystem zu verwenden, die Geschäftslogik (von c auf CPP) neu zu schreiben, eine neue E / A-Karte zu erstellen und eine neue Benutzeroberfläche zu erstellen.
Unterwegs haben wir einige schreckliche Entscheidungen getroffen. Wir hatten keine wirklichen Erfahrungen mit CPP und keinen Mentor, der es gut lehrte. Wir haben versucht, selbst ein UI-Framework auf Basis von win32 zu erstellen. Die Hardware war billig und der BSP fehlerhaft. Die Software war super flexibel, aber schwer zu pflegen. Letztes Jahr haben wir die einheimische Benutzeroberfläche rausgeschmissen und eine Benutzeroberfläche in .net entwickelt. Wir haben auch unseren Persistenzmechanismus und das Datenkommunikationsprotokoll komplett überarbeitet.
Es war sehr aufwändig, aber jetzt ist das Projekt fast abgeschlossen und die ersten Einheiten werden vor Ort getestet. Das Projekt war viel zu riskant, um Erfolg zu haben. Es gab einige positive Aspekte des Projekts, wir haben angefangen, SVN (anstelle von VSS) zu verwenden, wir haben uns Zeit genommen, um Komponententests zu schreiben und eine nächtliche Erstellung zu implementieren. Wir haben auch damit begonnen, Scrum zu verwenden, um einen besseren Prozess zu haben.
Rückblickend denke ich, dass die Neuformulierung der Geschäftslogik nicht notwendig war, wir hätten nur die hässlichsten Teile neu faktorisieren sollen. Und wenn Sie eine Benutzeroberfläche von Grund auf neu schreiben möchten, tun Sie dies nur, wenn es sich um Ihr Kerngeschäft handelt.
quelle
Eigentlich beginne ich ein großes Refactoring. 4MLocs sollten wahrscheinlich auf 800KLocs oder weniger verkleinert werden. Dieses Projekt viel Copy hat & Paste, Mißverständnis Sprach - Features, viele, viele sich wiederholende nutzlose Kommentare, schlechte Entscheidungen, temporäre Hacking und Hacking wandte sich permanent (einschließlich Abhilfen), vollständige Mangel an Wissen über grundlegende Prinzipien auf Informatik oder Software Engineering. Wahrscheinlich wird das Wartungsteam von 32 schlechten Programmierern nach dem Refactoring durch zwei gute ersetzt.
quelle
Ich habe in 3 Wochen einen Blog geschrieben. Ich habe es in 8 Stunden umgeschrieben.
Vorausplanung ist der Schlüssel für ein erfolgreiches Umschreiben. Das System von innen und außen zu kennen, ist ebenfalls von Vorteil.
quelle
Vor etwas mehr als einem Jahrzehnt habe ich für ein Unternehmen gearbeitet, das beschlossen hat, sein alterndes Kernprodukt neu zu gestalten. Seitdem ist die Erwähnung des Wortes "Redesign" strafbar. Es dauerte viel länger als erwartet, kostete offensichtlich mehr und das neue Produkt war dem alten Produkt viel ähnlicher als ursprünglich geplant.
quelle