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.
- Umschreiben um des Umschreibens willen ist nicht dein Freund. Es gibt immer eine Menge Komplexität, die Sie nicht sehen, und Sie werden feststellen, dass die hässlichen Dinge, die Sie sehen, Schulungsinstrumente für Ihren Kunden sind. Zeigen Sie Ihrem Kunden immer in regelmäßigen Abständen Ihren aktuellen Fortschritt, damit er Ihnen bei der Aufdeckung der schlimmsten Straftaten behilflich ist.
- Gezielte Umschreibungen sind nützlich, um die schlimmsten Verstöße in Ihrer Codebasis zu bekämpfen. Führen Sie keine vollständige Umschreibung durch, wenn Sie den Umfang einschränken und die meisten Ihrer Probleme beheben können.