Warst du jemals an einem BIG Rewrite beteiligt? [geschlossen]


55

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.


Was ist Ihre Schwelle für BIG ?
rwong

Ein Projekt, das über viele Jahre konsolidiert wird; dh kein Projekt, das in einem Monat umgeschrieben werden kann.
Systemstart

:) Das kann alles sein. Was jemand, der sein Studium ohne Erfahrung abgeschlossen hat, in einigen Monaten bis zu einem Jahr tun kann, ist ganz anders als das, was jemand mit zehn oder mehr hart erarbeiteten Erfahrungen tun kann.
Berin Loritsch

Mozilla hat addons.mozilla.org erfolgreich von CakePHP auf Django umgestellt. Es gibt einen Vortrag, der dieses große Umschreiben beschreibt ( DjangoCon 2010 Switching addons.mozilla.org von CakePHP zu Django ), aber in der TL: DR-Version wurde jeweils eine URL gewechselt.
user16764

Der Kontrapunkt zu Joel ist Fred Brooks wegweisendes Buch "Mythical Man Month". In seinem Aufsatz über Pilotsysteme behauptet er, dass Sie ein System wegwerfen werden , sodass Sie das Ereignis genauso gut planen können. Tatsächlich wird es mindestens eine Umschreibung geben, wahrscheinlich zwei, da die "größte Gefahr" in Brooks Augen im zweiten System liegt, in dem alle früheren Verzierungen und Merkmale zusammengefasst werden.
EBarr

Antworten:


62

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

  • Beträchtliche Unterschätzung des erforderlichen Aufwands: Jedes Mal, wenn jemand ein Umschreiben wünscht, liegt dies daran, dass das alte System alte Technologie verwendet und schwierig zu warten ist. Was sie nicht berücksichtigen, ist, dass es aufgrund seines Alters 30-40 Mannjahre Entwicklungsaufwand haben kann. Zu denken, man könne das Ganze in 6 Monaten mit einem 5-köpfigen Team umschreiben, ist albern.
  • Verlorenes Wissen: Das alte System gibt es schon so lange, es macht eine Menge Sachen und ist in alles eingebunden. Es gibt keine aktuelle Dokumentation und keine zentrale Behörde, die alle Funktionen des Systems kennt. Es wird Kenntnisse mit bestimmten Benutzern in bestimmten Abteilungen geben, und es ist schwierig oder unmöglich, sie alle zu finden.
  • Schlechte Managemententscheidungen: Die Änderungen, an denen ich beteiligt war, hatten ähnliche Erwartungen an das Management: Das neue System sollte "fertig" sein, und das alte System könnte einfach zu einem bestimmten Zeitpunkt (Zeitraum) ausgeschaltet werden. Keine andere Option war akzeptabel. Ich denke, sie haben das im Kopf, weil sie das ganze Geld ausgeben, um neue Leute für dieses riesige Projekt einzustellen. In Wirklichkeit besteht die bessere Strategie zur Risikominimierung darin, die Hauptfunktionen des alten Systems neu zu schreiben, beispielsweise 50-75% des alten Systems für eine erste Veröffentlichung in Angriff zu nehmen und dann zu sehen, wie es funktioniert! Aufgrund der obigen Punkte 1 und 2 würde dies wahrscheinlich viel besser funktionieren, da wir einige der fehlenden Funktionen und die Voraussetzungen für das Ausschalten des alten Systems herausfinden.

21

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.

11

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.


Ich würde das nicht als Umschreiben bezeichnen ... eher als Upgrade ... es sei denn, Sie haben den Code in C # konvertiert oder so. Haben Sie den neuen Code tatsächlich von vorne angefangen?
Jay

3
@ Jay - Sie waren alle neu geschrieben, keine Konvertierung. Wir haben die Gelegenheit genutzt, um alle drei Apps neu zu gestalten. Ich sehe keinen Wert in einer direkten Konvertierung, wenn Sie die Mängel des vorhandenen Systems nicht beheben. In unserem Fall fing das bei Null an.
Walter

Wie groß waren sie? Wie viele Codezeilen im Originalsystem, wie viele Personenmonate hat das Umschreiben gedauert?
MarkJ

11

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.


1
Das kann ich bestätigen. Es ist in Ordnung, eine Arbeitskopie des alten Systems als Eingabe für ein Anforderungsdokument zu verwenden. Aber dann muss der Kunde dieses Dokument abzeichnen, nicht irgendeine vage Vorstellung des alten Systems.
Adrian Ratnapala

9

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.


5

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.


Ich sitze bei meinem derzeitigen Kunden im selben Boot - außer ich trage den "Vollzeit" -Hut. Beibehaltung der vorhandenen Access-Anwendung beim Beenden des Umschreibens des "neuen" .NET-Ersatzes, den ich von früheren Entwicklern übernommen habe. Es ist nicht einfach, und unvorhergesehene Probleme nehmen immer mehr Zeit in Anspruch, als alle erwarten.
BenAlabaster

3
Wenn Sie fertig sind, aktualisieren Sie Ihre Antwort mit "Ich habe erwartet, dass es so läuft, aber es läuft so", damit andere realistischere Schätzungen vornehmen können.

1
@Thor Sicher, aber Sie können eine Weile warten. Die Anwendung hat viel mehr zu bieten, als ich jemals erwartet hatte (Sicherheit, Compliance usw.), und der Versuch, etwas GUTES zu erstellen, anstatt nur etwas zu erstellen, dauert länger als gedacht.
Rachel

Es hört sich so an, als hättest du bereits weitere Horrorgeschichten zu teilen :)

10
@MarkJ Leider wurde das Projekt nach ungefähr einem Jahr abgebrochen, weil das Unternehmen nicht das Geld und die Ressourcen ausgeben wollte, um es weiter aufzubauen. Ich denke, sie dachten, wir machten Witze, als wir ihnen sagten, dass es mit einem Teilzeitprogrammierer ungefähr 5 Jahre dauern würde ... Ich war sehr enttäuscht, aber ich habe viel gelernt und das machte mich insgesamt zu einem besseren Programmierer .
Rachel

3

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.


Möchten Sie mitteilen, warum die alte Version zu schlecht war, um Abhilfe zu schaffen? Hast du die Plattform gewechselt?

1
Wir haben Datenbanken geändert (SQL Anywhere 6 auf MS SQL Server 7), aber der Haupttreiber war, dass die Anwendung fast ausschließlich mit der schlechtesten Methode zum Schreiben von Delphi geschrieben wurde: die gesamte Modell- und Controller-Logik in den Ansichten, dreifach 500 Zeilen verschachtelte Schleifen usw. usw. Es war ein Durcheinander, wir konnten nicht einmal feststellen, wie wir anfangen sollten, es zu entmessen, und wir änderten trotzdem die Datenbanken.
Frank Shearar

3

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:

  • Student # 1 - schrieb den Datenbankzugriff / die Datenbankabfragen neu, um sie sicherer zu machen
  • Student # 2 - hat das ganze CSS "nach oben" verschoben
  • Student # 3 - hat alle Seiten w3c-kompatibel gemacht
  • Student # 4 - behebt alle anstehenden Fehler
  • Ich selbst: alle PHP-Warnungen und beschissenen Sachen entfernt (doppelter Code und so weiter)

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:

  • Studieren Sie die gesamte Site und erstellen Sie ein gutes "Produktanforderungsdokument".
  • Entwerfen Sie die Datenbank neu
  • Beginne von vorne mit meinem eigenen Framework (was bereits funktioniert)
  • Neugestaltung der Site.
  • Mehrsprachig.

Zeit, die es gedauert hätte: zwei Monate ( vielleicht weniger ).

  • Guter Code.
  • Gute Pflege.
  • Produktivität.
  • Keine Antworten wie "Das können wir nicht, die Website kann mit solchen Produkten nicht umgehen".

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


Wenn das Projekt 2 Monate dauern würde, würde ich es nicht als "BIG" -Rewrite betrachten. Vor allem mit einem Team von nur 5 Leuten.
Joel Etherton

Sie haben in gewissem Sinne recht. Ich dachte nur, "BIG" wäre näher an "FULL" als "> 2-4 Leute, die daran arbeiten". Glaubst du, mein Beitrag ist nutzlos? Wenn ja, werde ich es entfernen. Vielen Dank.
Olivier Pons

Nein, ich denke nicht, dass es überhaupt nutzlos ist. Sie erhöhen mehrere anständige Punkte. Ich wollte nur eine Bemerkung machen, weil die im kleinen Maßstab aufgetretenen Probleme sich sehr von den im großen Maßstab aufgetretenen Problemen unterscheiden. In meiner Antwort betrachte ich das Umschreiben von Medium Scale.
Joel Etherton

@Joel: ok Ich habe deine Antwort gelesen, das ist überhaupt nicht das gleiche "Problem". Auch hier kommt es auf den Fall an. Übrigens habe ich vor ein paar Jahren den ganzen Artikel von Joel auf Französisch übersetzt (auf meinem persönlichen Blog);)
Olivier Pons

2
@OlivierPons Ich bin mir nicht sicher, ob der Vergleich zwischen dem, was Sie tatsächlich getan haben, und dem, was Sie hätten tun können, ein fairer Vergleich ist ...
vaughandroid

2

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.


2

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.


1

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.


Ich bin gespannt, was sich daraus ergibt. Ist es gelungen Was hast du dabei gelernt? Oder wo sind die Dinge jetzt, wenn sie noch nicht fertig sind?
Kimball Robinson

1

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.


4
Würden Sie ein dreiwöchiges Projekt als großes Projekt betrachten?
John MacIntyre

@John: Nein, ich würde nicht sagen, dass es groß ist , aber ich weise auf den Zeitunterschied zwischen dem Schreiben von etwas und dem Hinzufügen von Stücken im laufenden Betrieb und dem erneuten Schreiben mit einem soliden Plan hin. Ich habe in 3 Wochen ein komplettes Managementsystem umgeschrieben, dessen Zusammenstellung ursprünglich ungefähr 8 Monate gedauert hat. Auch hier brauchen Sie einen soliden Plan und eine solide Richtung.
Josh K

Eine vorhandene Version (mit oder ohne Quellcode, aber eine, an der Sie frei basteln können) hilft auf jeden Fall beim Umschreiben. Mehr ist besser.
rwong

Um genau zu sein, haben Sie in 3 Wochen einen Prototyp einer Blogging-Engine implementiert .

@Thorb: Klar, das könnte man wohl sagen.
Josh K

1

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.

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.