Entschuldigung, das wird lange dauern, aber es basiert auf persönlicher Erfahrung als Architekt und Entwickler bei mehreren Umschreibprojekten.
Die folgenden Bedingungen sollten Sie veranlassen, eine Art von Umschreiben in Betracht zu ziehen. Ich werde darüber sprechen, wie ich entscheiden soll, was ich danach tun soll.
- Die Hochlaufzeit für Entwickler ist sehr hoch. Wenn es (je nach Erfahrung) länger dauert, bis ein neuer Entwickler hochgefahren ist, muss das System neu gestaltet werden. Unter Hochlaufzeit verstehe ich die Zeitspanne, bis der neue Entwickler bereit ist, sein erstes Commit durchzuführen (bei einem kleinen Feature).
- Frisch vom College - 1,5 Monate
- Immer noch grün, habe aber schon an anderen Projekten gearbeitet - 1 Monat
- Mittelstufe - 2 Wochen
- Erfahren - 1 Woche
- Senior Level - 1 Tag
- Die Bereitstellung kann aufgrund der Komplexität der vorhandenen Architektur nicht automatisiert werden
- Selbst einfache Fehlerbehebungen dauern aufgrund der Komplexität des vorhandenen Codes zu lange
- Neue Features dauern zu lange und kosten zu viel, da die Codebasis voneinander abhängt. (Neue Features können nicht isoliert werden und wirken sich daher auf vorhandene Features aus.)
- Der formale Testzyklus dauert aufgrund der gegenseitigen Abhängigkeit der vorhandenen Codebasis zu lange.
- Zu viele Anwendungsfälle werden auf zu wenigen Bildschirmen ausgeführt. Dies führt zu Schulungsproblemen für Benutzer und Entwickler.
- Die Technologie, in der sich das derzeitige System befindet, verlangt dies
- Qualitätsentwickler mit Erfahrung in der Technologie sind zu schwer zu finden
- Es ist veraltet (es kann nicht aktualisiert werden, um neuere Plattformen / Funktionen zu unterstützen)
- Es steht einfach eine viel ausdrucksstärkere Technologie auf höherer Ebene zur Verfügung
- Die Kosten für die Aufrechterhaltung der Infrastruktur der älteren Technologie sind zu hoch
Diese Dinge sind ziemlich selbstverständlich. Die Entscheidung für eine vollständige Neufassung im Vergleich zu einer inkrementellen Neufassung ist subjektiver und daher politischer. Was ich mit Überzeugung sagen kann, ist, dass es falsch ist, kategorisch zu behaupten, dass es nie eine gute Idee ist.
Wenn ein System schrittweise umgestaltet werden kann und Sie die volle Unterstützung des Projektsponsorings für so etwas haben, sollten Sie dies tun. Hier ist jedoch das Problem. Viele Systeme können nicht inkrementell umgestaltet werden. Hier sind einige der Gründe, auf die ich gestoßen bin, die dies verhindern (sowohl technisch als auch politisch).
- Technisch
- Die Kopplung von Komponenten ist so hoch, dass Änderungen an einer einzelnen Komponente nicht von anderen Komponenten isoliert werden können. Eine Neugestaltung einer einzelnen Komponente führt zu einer Kaskade von Änderungen nicht nur an benachbarten Komponenten, sondern indirekt an allen Komponenten.
- Der Technologie-Stack ist so kompliziert, dass das zukünftige Zustandsdesign mehrere Infrastrukturänderungen erfordert. Dies wäre auch bei einer vollständigen Neuschreibung erforderlich. Wenn dies jedoch bei einer inkrementellen Neugestaltung erforderlich ist, verlieren Sie diesen Vorteil.
- Das Neugestalten einer Komponente führt ohnehin zu einem vollständigen Umschreiben dieser Komponente, da das vorhandene Design so fubar ist, dass es nichts wert ist, gespeichert zu werden. Auch hier verlieren Sie den Vorteil, wenn dies der Fall ist.
- Politisch
- Die Sponsoren können nicht verstehen, dass eine inkrementelle Neugestaltung ein langfristiges Engagement für das Projekt erfordert. Die meisten Unternehmen verlieren unweigerlich den Appetit auf den anhaltenden Budgetverlust, der durch eine schrittweise Neugestaltung entsteht. Dieser Appetitverlust ist auch für ein Umschreiben unvermeidlich, aber die Sponsoren werden eher dazu neigen, fortzufahren, weil sie nicht zwischen einem teilweise vollständigen neuen System und einem teilweise veralteten alten System aufgeteilt werden möchten.
- Die Benutzer des Systems sind zu stark mit ihren "aktuellen Bildschirmen" verbunden. In diesem Fall verfügen Sie nicht über die Lizenz, um einen wichtigen Teil des Systems (das Front-End) zu verbessern. Mit einer Neugestaltung können Sie dieses Problem umgehen, da sie mit etwas Neuem beginnen. Sie werden immer noch darauf bestehen, "die gleichen Bildschirme" zu bekommen, aber Sie müssen etwas mehr Munition zurückschieben.
Denken Sie daran, dass die Gesamtkosten für die schrittweise Neugestaltung immer höher sind als für eine vollständige Neugestaltung, die Auswirkungen auf das Unternehmen jedoch in der Regel geringer sind. Meiner Meinung nach, wenn Sie ein Umschreiben rechtfertigen können und Superstar-Entwickler haben, dann tun Sie es.
Tun Sie es nur, wenn Sie sicher sein können, dass der politische Wille vorhanden ist, es zu Ende zu führen. Dies bedeutet sowohl das Buy-In für Führungskräfte als auch für Endbenutzer. Ohne es werden Sie scheitern. Ich gehe davon aus, dass Joel das für eine schlechte Idee hält. Das Buy-in von Führungskräften und Endbenutzern sieht für viele Architekten aus wie ein Einhorn mit zwei Köpfen. Sie müssen es aggressiv verkaufen und kontinuierlich für seine Fortführung werben, bis es vollständig ist. Das ist schwierig, und Sie sprechen davon, Ihren Ruf auf etwas zu setzen, das manche nicht für erfolgreich halten wollen.
Einige Erfolgsstrategien:
- Versuchen Sie in diesem Fall jedoch nicht, vorhandenen Code zu konvertieren. Entwerfen Sie das System von Grund auf neu. Sonst verschwenden Sie Ihre Zeit. Ich habe noch nie ein "Umbau" -Projekt gesehen oder gehört, das nicht kläglich endete.
- Migrieren Sie die Benutzer teamweise auf das neue System. Identifizieren Sie die Teams, die die größten Probleme mit dem vorhandenen System haben, und migrieren Sie sie zuerst. Lassen Sie sie die guten Nachrichten durch Mundpropaganda verbreiten. Auf diese Weise wird Ihr neues System von innen verkauft.
- Entwerfen Sie Ihr Framework so, wie Sie es benötigen. Beginnen Sie nicht damit, ein Framework zu erstellen, für das ich 6 Monate gebraucht habe.
- Halten Sie Ihren Technologiestapel so klein wie möglich. Überplanen Sie nicht. Sie können Technologien nach Bedarf hinzufügen, das Herausnehmen ist jedoch schwierig. Je mehr Ebenen Sie haben, desto mehr Arbeit ist für Entwickler erforderlich. Machen Sie es sich von Anfang an nicht schwer.
- Beziehen Sie die Benutzer direkt in den Entwurfsprozess ein, aber lassen Sie sie nicht vorschreiben, wie dies geschehen soll . Verdienen Sie ihr Vertrauen, indem Sie ihnen zeigen, dass Sie ihnen das geben können, was sie besser wollen, wenn Sie guten Designprinzipien folgen.