Back to "Arbeiten auf Legacy-Codebases oder einem Auftragnehmer"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

Legacy Code

Arbeiten auf Legacy-Codebases oder einem Auftragnehmer

Wednesday, 06 November 2024

Einleitung

Als freiberuflicher Entwickler eines der Geschicklichkeits---Sets müssen Sie schnell lernen ist, wie man auf bestehenden Codebases effektiv arbeiten .. . I' .ve hatte Glück, eine Reihe von gebaut haben ..MSC3 .Scratch-Systeme . ; . Dies ist ein JOY als erfahrener Entwickler aber es ist nicht immer der Fall .

Herausforderungen

Vermächtnis-Systeme haben bedeutende Herausforderungen, vor allem wenn die wichtigsten Entwickler / architekten, wenn Sie glücklich genug sind, dass sie sich auf . umgezogen haben

Dokumentation

Dies wird oft übersehen, vor allem in kleineren Unternehmen... im Allgemeinen... benötigen Sie Schlüsseltypen der Dokumentation...

  1. Anleitung für neue Entwickler so wie führen Sie das Projekt lokal Mehr dazu in einer Minute – was für Überlegungen gibt es, wenn man z.B. ein anderes Framework als das aktuelle benötigt? – ,... besonders wahr mit Node traurig – )....
  2. Einsatz Dok. in diesen Tagen, wenn CII-/-CD als der Gold angesehen wird.--Standard des Einsatzes es häufig übersehen ', dass Sie wissen müssen, wie das System manuell zu implementieren ist.MSC3-Dies gilt vor allem dann, wenn Sie an einem System arbeiten, das sich seit einer Weile befindet und eine Menge manuelle Schritte hat.
  3. Verfahren zur ProblemlösungWas machst du, wenn das System nach unten geht??? Wen nennst du ? Was sind die wichtigsten Dinge zu überprüfen??" Dies wird oft übersehen, aber ist CRUCIAL in einem Produktionssystem.
  4. **Architektonisches System (MSK)**Wie funktioniert das System? - ? - Was sind die Schlüsselkomponenten? -? - Was ist die wichtigsten Abhängigkeiten? -? - Denken Sie daran, wie Ihre Roadmap beim Erlernen eines neuen Systems funktioniert? - . - Es bietet einen hohen Überblick darüber, wie das System funktioniert, was kritisch sein kann. - ( - vor allem in größeren verteilten Systemen. -). - Dieses SHOULD beinhaltet, welche Quellcode-Repositorien verwendet werden. -, - welche CI-/ -CD-Systeme verwendet werden können. - , - welche Datenbanken für jedes Element der Anwendung benutzt werden. In einer Anwendung des .-NET Core würde dies ein Diagramm der Dienste enthalten und wie sie miteinander interagieren. ( und das vordere Ende Andere Backend Systeme. ) und möglicherweise ASP-.-NET Ansichten und welche Dienstleistungen sie verwenden können.

Dokumentation ist eines der Dinge, die wir als Entwickler oft hassen, tun (-it-'-s NICHT-Code-M)-aber es ist wichtig '-s Wie Sie sehen können I LOVE Markdown-,- mit den Likes von Mermaid und PlantUML können Sie einige wirklich schöne Diagramme und Flussdiagramme erstellen, die in Ihrer Dokumentation enthalten sein kann

Es muss CURRENT-; , Entwickler oft über Bit sprechen , - , rot , ; , wo ein Projekt ,' , Abhängigkeiten veraltet werden , / , direkt Sicherheitsrisiken , das gilt auch für die Dokumentation , wenn es nicht aktuell es ' ist nicht nützlich

Es gibt verschiedene Ebenen der Dokumentation, aber im Allgemeinen wann immer Sie Code ändern, auf den in einem Dokument verwiesen wird, sollten Sie dieses Dokument aktualisieren.

Betrieb des Systems vor Ort

Dies ist oft eine Herausforderung, vor allem wenn das System schon seit einer Weile um .. . . . Sie müssen wissen, welche Version von Node . / . ? . .NET etc .., . welche Version der Datenbank . , . Welche Version des Rahmens usw .. . Dies wird häufig übersehen, aber CRUCIAL aufstehen und schnell laufen .

I'hve oft gesehen Entwickler sagen, dass dies ist .'t relevant in diesen Tagen der Cloud-Systeme und große verteilte Anwendungen . ,h aber ich bin nicht einverstanden, ;h müssen Sie in der Lage sein, das System lokal zu debuggen Probleme schnell und effektiv .

  1. Profiling - , dies scheint zu haben, um ein Entwickler nur fortgeschritten' Geschicklichkeit , , aber es ist entscheidend in der Lage sein, Ihren Code zu profilieren, um zu sehen, wo die Engpässe sind. , Dies gilt vor allem in einem Legacy-System, wo Sie nicht den Luxus des Seins können das System von Grund auf neu schreiben Tools wie dotTrace und dotMemorysind hier von unschätzbarem Wert besonders in ASP-.-NET-Anwendungen die größten Probleme sind im Allgemeinen '-Leaks im System ;-Speicher Lecks ,-Verbindung Lecks etc. .-Während Ihre App scheinen, FINE für ein bisschen laufen Sie plötzlich finden es ,'-Abstürzen , /-Verwendung bis alle Speicher auf dem Server ?.-
  2. Finden von Problemen im Debugger Response.Write in Classic ASP sind über-. Für eine noch bescheidene komplexe Anwendung Vor allem diejenigen, die Sie geschrieben haben, ' schreibst du es aus.' ist entscheidend für einen Schritt durch den '-Code, um einer Anfrage von seiner Gründung durch den Dienst zu folgen, um festzustellen, was MIGHT geschieht, M,, welche Ausnahmen nicht gefangen werden können usw.
  3. Logging -- , Wieder oft übersehen ,( , Sorry aber kein ASP , . ,NET Core Ausnahme Filter an der Spitze des Stapels ist , ' , nicht genug . vorheriger BeitragLogging ist ein kritischer Teil beim Arbeiten im Code LOCALLY-.. Denken Sie daran, dass Sie Kundenlogging-Typen verwenden können, z.B. mit dem Protokollierung von QuellengeneratorenSie können dann festlegen, welche Ereignistypen protokolliert werden sollen und welche sollten... Dies ist entscheidend in einem Legacy-System, wo Sie möglicherweise nicht den Luxus haben, das System von Grund auf neu zu schreiben Für Anwendungs-Insights können Sie wünschen Benutzerreisen und andere Funktionen. dies wird teuer schnell bei Verwendung von LogInformation Sie können einen benutzerdefinierten Telemetrie-Prozessor verwenden, um Anfragen herauszufiltern, die Sie nicht loggen möchten.
  4. Testen von - Zu oft sehe ich Entwickler, die in Preprod testen oder denken, dass Unit-Test dann Check-In ist ENOUGH in Bezug auf Tests, seine RARELY IST,. Es ' ist eine Menge Wert in beiden mit einem Tool wie Resharper ./. NCrunch automatisch zu laufen Einheitstests ?;. Aber erinnern Sie sich Unit-Prüfungen sind nur, dass .; testen sie eine . '.unit . '. von Code ... Sie müssen die Sichtbarkeit in, wie das System tatsächlich läuft im Konzert mit anderen Komponenten beibehalten ? .. Dies ist, wo Integrationstests kommen in ]; , sie testen, wie die Anlage als Ganzes läuft . SpecFlow Um diese Tests in einem humanen zu schreiben - lesbaren Format - wieder ; , entscheidend in einem Legacy-System, wo Sie möglicherweise nicht den Luxus haben, das System von Grund auf neu zu schreiben

Im ALLEN Projekt arbeite ich auf dem ersten Schritt ist das System zu bekommen, oder ein großer Teil davon, die vor Ort ausgeführt wird, .... Indem Sie sehen, wie der Code läuft, den Code zu debuggen, können Sie ein Gefühl für, wie das System funktioniert.

Die Codebasis

In jedem System ist dies Ihr Quelle der WahrheitWas andere Ihnen darüber sagen, wie es funktionieren soll, ist wie es funktioniert.

Diese oft herausfordernden , , es zu finden, wie das Finden Sie Ihren Weg in einer neuen Stadt ohne Roadmap , . Glücklicherweise in Anwendungen haben Sie einen Einstiegspunkt ,( , eine Seite Laden , / , ein Frontend API-Aufruf etc ,.) , wählen Sie einen Punkt und starten Sie dort .. ,

Verwenden Sie, was auch immer Sie benötigen, um mit ihm zu interagieren ., , ob es ?' s PostMan , , , Rider , ' , HttpClient oder sogar ein Web-Seite .. , Haken in Ihrem Debugger machen Sie den Anruf und folgen Sie ihm durch .... , Spülen und wiederholen für jeden Teil des Systems .

Refaktorisierung

Im Allgemeinen LEAVE DIESES UND DICH DAS SYSTEM VERSTÄNDLICH ., ES IST IMMER verlockend, es wegzuwerfen und wieder zu starten.', aber widersteht dieser Versuchung... besonders für ein laufendes System. ES ARBEITET rekonstruieren sogar Refactoring eines Systems ist ein HUGES-Risiko...Ja es ist '.s FUN aber für jede Zeile des Codes, die Sie ändern Sie riskieren Einführung neuer snd spannende Bugs.

Wie alles andere müssen Sie vor allem beim Contracting die Arbeit rechtfertigen, die Sie auf einem System durchführen.

  1. Leistung Das System ist langsam und muss aufgepeppt werden.(.Seien Sie wieder vorsichtig, ,.Was SIE langsam finden, kann sein, wie das System entwickelt wird, um zu arbeiten.).. Machen eines Teils Rauchen schnell können Probleme weiter unten das System einführen... Werden Sie '.kill-'. den Datenbankserver erstellen?,. Wenn Sie zu viele Anfragen stellen, haben Sie einen Mechanismus, der nicht Kaskadierungsausnahmen verursacht.?.
  2. Sicherheit Das System ist unsicher und muss sicher gemacht werden.Das ist ein kniffliges System, besonders in einem Legacy-System.Mit bit.-.rot können Sie feststellen, dass das System alte Versionen von Bibliotheken verwendet, die bekannte Sicherheitsprobleme haben...Dies ist eine gute Rechtfertigung für die Arbeit.MSC6. Seien Sie sich jedoch bewusst, dass Sie möglicherweise einen LOT des Systems refaktorisieren müssen, um es auf den neuesten Stand zu bringen.;.
  3. Erhaltungsfähigkeit Das System ist schwer zu pflegen und muss einfacher zu warten gemacht werden.. Im Allgemeinen wird dies eine Menge Arbeit, macht das die aktuelle Lebensdauer der Codebase rechtfertigen diese...? Wenn Sie mehr Zeit damit verbringen, diese Änderungen vorzunehmen, um die Wartungsfähigkeit zu verbessern, als Sie jemals für den Kunden speichern, dann lohnt es sich nicht ?( und wieder ? , ? geänderter Code ? == ? neue Fehler ?). ?
  4. Benutzererfahrung Ich priorisiere im Allgemeinen diese Probleme Benutzer Es spielt keine Rolle, ob dein Code besser ist...... sie sind diejenigen, die für die Arbeit ZAHLEN, die du am Ende tust..,... wenn du ihre Erfahrung besser machen kannst, als es sich lohnt.. ..

Das Geschäft der Arbeit an Vermächtnissystemen

Dies wird oft übersehen, vor allem von Entwicklern...Sie müssen in der Lage sein, die Arbeit zu rechtfertigen, die Sie auf einem System tun.MSC3.Dies gilt besonders in einer kontraktiven Umgebung, wo Sie zahlen durch die Stunde...Im Endeffekt ist es nicht Ihr Code und nicht Ihr Geld, die WARUM Sie machen eine Änderung häufig wichtiger als die Veränderung selbst.MSZ10.

I''ve arbeitete als Auftragnehmer für mehr als ein Jahrzehnt jetzt ,' it ''s nicht EASY-;' als Auftragnehmer jede Stunde Ihrer Zeit ist eine .''cost .'" an den Kunden Sie müssen bewegen Wert auf das System, als Sie kosten hinzufügen .' Wenn Sie nicht dann ''re you ?''ll schnell nach einem neuen Vertrag suchen .

Als Entwickler sind wir dazu neigen, miese Geschäftsleute zu sein, die wir uns auf 're konzentrierten und bei jedem Dreh'... in Wirklichkeit... du musst kein System machen... '...perfekte '... ..(.... argumentieren, dass es keine solche Sache gibt.

Bei einem längerfristigen Engagement gewährleistet diese INKLUSION neu Code ist wartungsfähig und kosteneffizient, um zu laufen . In Legacy-Systemen ist dies MUCH HARDER..... Sie müssen oft durch einen Sumpf waten, der besorgt ist, dass während Sie das System lernen, können Sie nicht viel Wert anbieten. I'm not making any changes du denkst I'm just learning the system. Dies ist ein Trugschluss, um das System besser zu machen.'re Lerne das System, damit es effizienter wird.MSC4re Lernen des Systems, um es wartungsfähiger zu machen Wenn ein Kunde diesen Schritt nicht akzeptieren kann, dann müssen Sie sehr vorsichtig sein, wie Sie diese kommunizieren.MSZ8 oder suchen Sie nach einem neuen Vertrag.

Das Volk

Wieder oft übersehen, dass eine Menge von der Zeit, die du als Auftragnehmer hereingebracht hast, weil einige Schlüsselperson verlassen hat (...'... sich in die Politik dieses ;... es zu engagieren ist nicht dein Anliegen ).. Du musst mit den Menschen arbeiten können, die da sind, um die Ziele des Projekts zu erreichen... In einem Vertrag haben Sie im Allgemeinen die Bedingungen Ihres Engagements ausgeschrieben In meinem aktuellen Vertrag es 's verbessern Verlässlichkeit und Reduzierung der laufenden Kosten '); fokussieren Sie sich auf diese . Wenn Sie nicht sicher sind, was das bedeutet

Behalten Sie im Auge, wer Ihr direkter Kontakt ist... vor allem in den ersten paar Monaten... halten Sie sie auf dem Laufenden.... wahrscheinlich haben ' nicht neue Funktionen zu prahlen, während Sie sich auf wie das System funktioniert gesponnen bekommen... ich schicke generell eine Zusammenfassung E-Mail jede Woche... zwei Wochen an meinen direkten Kontakt...

Denken Sie daran, dass dies die Person ist, die Ihre Rechnung genehmigen wird.;... es sollte keine Überraschungen zur Rechnungszeit geben... sobald Sie anfangen, den Code regelmäßig zu überprüfen, ist dies weniger ein Problem, das Sie haben eine Aufzeichnung von genau dem, was Sie getan haben und der Einfluss, den es hatte....... bis dahin müssen Sie sie auf dem Laufenden halten. Sie müssen wissen, was du getan hast und warum sie dich dafür bezahlen sollten.

Zuverlässigkeit

Wiederum – ,. zurück zum Legacy-Code, wenn Sie eine Änderung im Allgemeinen vornehmen, müssen Sie es bereitstellen –..Auch das Beste von uns wird dieses Problem von Zeit zu Zeit lösen – vor allem in den legacy Code Systemen wird etwas sein. Du könntest ' nicht wissen wenn Sie die .-Datei bereitstellen Dies wird wieder zum Protokollieren von -, wenn Sie einen Staging-Server haben es eine LOT zu protokollieren.(-Datei aber für einen kurzen Zeitraum beibehalten.MSC3-Datei dann, wenn du auf DIESEM bereitstellen kannst du mehr Informationen darüber sammeln, was fehlgeschlagen ist.

Egal wie gut du bist, ,, wie viel lokales Testen du gemacht hast, wir sind alle menschlich.., Dies ist ein Schlüsselteil des Einsatzes von ', der auf einer Freitag-', Regel, ; erwartet, dass eine Bereitstellung ein neues Problem auf einem System verursachen wird.., bereit sein zu arbeiten, bis es . gelöst ist Wenn Sie nicht mehr wissen, warum es fehlgeschlagen ist...,, fügen Sie weitere Tests hinzu, um das Problem zu reproduzieren und mehr Protokollierung sicherzustellen, damit Sie ähnliche Probleme in der Zukunft fangen können.

Besonders für Produktionssysteme kann Ihr Staging-System nicht sein, besonders wenn es um Last geht. K.M.S.K. kann Ihnen helfen, Last zu simulieren, sogar besser vor Ort, wo Sie richtige Profilierung wie zuvor erwähnt tun können

Einsatz

Nochmals oft übersehen in der Fervour für CI-/-CD ist die WARUM von diesen .. ? Simple ?; ? YOU WILL FUCK UP. ? Mit einem sehr schnellen und effizienten Weg, um ein System zu implementieren bedeutet, dass, wenn Sie es brechen können Sie auch schneller beheben ? . ? Wenn Ihr CI-Code Überprüfungssystem bedeutet, es dauert Tage, um eine PR zusammengeführt bekommen dann, dass ?' ? die schnellste kann man vernünftigerweise fi ein System ?mesK7 ? wenn Ihr CD-System bedeutet, Sie nehmen das laufende System ; get gewöhnen sich an LONG Nächte ?".

Ein effizienter Mechanismus zum Fixieren und Deployment von Code ist für eine effiziente Entwicklungspipeline unerlässlich.Wenn es länger dauert, um einen Fix zu implementieren, als nötig war, um diesen Fix im Code zu finden und umzusetzen, dann sind Sie weniger wahrscheinlich, Sachen zu reparieren.

Befestigen von Legacy-Apps

Ich habe dies in Anführungszeichen gesetzt, da dies ein Problem ist, das für Legacy-Anwendungen verwendet wird, insbesondere wenn großformatige Nachbearbeitungen außerhalb der Grenzen erfolgen.

  • Patches ausführen

Dies ist der Prozess des einfachen Fixierens vorhandener Code.;... wieder sicherstellen, dass Sie gründlich testen und Prozesse an Ort und Stelle haben, um alle Fehlerbehebungen rückgängig zu machen. Diese Art der Entwicklung ist selten FUN, da du noch wahrscheinlich durch den Sumpf des bestehenden Codebase watest.

Wie üblich sollten Sie sicherstellen, dass Sie SOME FORM of test haben, um den aktuellen Code zu erfahren. Im Idealfall sollte es auch auf Fehler testen für das Problem, das Sie versuchen zu lösen BEFORE machen Sie die Lösung . Sie IDYLL für dies ist, um eine Einheit Test, der eng zielt auf den Bereich des Codes, die Sie zu beheben müssen, aber das ist oft außerhalb des Arbeitsbereiches für große · ,...

I''d verwenden im Allgemeinen ein System von Tests in dieser Reihenfolge der Präferenz

  1. Einheitstests Diese werden wieder bevorzugt, da Sie diese nur darauf zielen können, den Code auszuüben, an dem Sie arbeiten, aber in einem Legacy-System sind diese oft nicht vorhanden.&. extrem schwierig nachzurüsten.(. zum Beispiel in einem System mit vielen externen Anrufen.
  2. Integrationstests Dies ist ein überlasteter Begriff, da er alles von einem Unit-Test abdecken kann, der mehrere Schichten des Codes durchläuft . Diese werden am besten vermieden . Überprüfen durch sogar zu Selen-Tests. , Im Allgemeinen möchten Sie das System als Ganzes testen , aber beachten Sie, dass diese Tests langsam und spröde sein können , kann die Verwendung von Verify oft ein großer Ansatz für Legacy-Systeme sein, da Sie mindestens , ' ,verify ,' Sie nicht brechen die API-Oberfläche des Systems. ,
  3. Manuelle Tests Alle Entwickler sollten versuchen, manuelle Tests für jeden Code-Checkin zu starten Dies ist nur sicherzustellen, dass das, was Sie erwarten, das .' user .SK3 .( .Dies kann ein wirklicher Benutzer oder eine andere Komponente des Systems sein, die mit Ihrem Code interagieren ?) , um zu sehen, ist, was sie tatsächlich sehen . . . Dies kann so einfach wie die Ausführung des Systems lokal und Überprüfung der Ausgabe einer Seite oder so komplex wie die Durchführung einer vollständigen Reihe von Tests auf einem Staging-Server sein .
  • Zwiebelhautbildung Für die Arbeit an Legacy-Systemen haben Sie in der Regel den Luxus eines kompletten Nacharbeitens, wobei ich das Häuten von ' einsetze.

Um Ihnen das Upgrade von PARTS eines Systems zu ermöglichen, können Sie Komponenten identifizieren, die von einem bestehenden Monolithen in einen Microservice aufgeteilt werden können. Häufige Beispiele könnten API-Endpunkte in neue Projekte aufspalten, die mehr aktualisierte Elemente verwenden.Der Terror von DRY kann hier jedoch ins Spiel kommen...Eine schlecht strukturierte Lösung hat oft viele -' helper- oder -' service-Komponenten, die wirklich in verschiedenen Projekten sein sollten.MSC6.oder sogar in Nuget-Paketen für mehr globale Wiederverwendung.

I'-ll decken diesen Ansatz weiter in einem zukünftigen Artikel als es ist ein Schlüsselelement, wie ich auf Legacy-Systeme arbeiten.& - nicht offensichtlich für viele Entwickler.

Bezahlen

Nun, da wir all dies aus dem Weg gibt es das dornige Problem der Zahlung...... Ich habe eine allgemeine Regel..

Irgendwelche Zahlungsprobleme I'-m suchen, um sich zu bewegen

Wenn sie sich zu spät zahlen, hängt von Ihrem Vertrag ab, aber bei LEAST innerhalb von 2 Tagen, aber in der Regel näher an 7; ist dies ein schlechtes Zeichen, wenn es .. Wenn es quebbles über Ihre Rechnung .(.nickle .SK7 und .-.dimeing ?). Denken Sie darüber nach, ob das Unternehmen in der Lage ist, für Ihre Dienstleistungen auf einer kontinuierlichen Basis bezahlen

Don-' messing herum mit diesem, wenn Sie getan haben 've Ihre Arbeit müssen Sie in einer zeitgemäßen Art und Weise bezahlt werden Es spielt keine Rolle, wie viel Sie genießen es ;, wenn ein schlechter Kunde KANN dich ausnutzen sie nutzen wird es nie wert '

Seien Sie ehrlich... nur für die Zeit, die Sie tatsächlich gearbeitet haben... stellen Sie sicher, dass es... klar ist, was Sie getan haben und warum Sie es getan haben.

I'®ve führte Teams von Entwicklern und IM'«ve war ein Entwickler.;« IM'«ve wurde ein Bauunternehmer und IMMSC4«ve ein Kunde, der alle Seiten davon gesehen hat, und ich kann Ihnen sagen, wenn Sie nicht pünktlich bezahlt werden, dann müssen Sie auf dem Flip-. auf der -'side bewegen, wenn man einen Bauunternehmer haben ?(?oder eine FTE...)? wer nicht liefert, dann musst du diese schnell angehen.] Jeder hat persönliche Kämpfe, aber vor allem in einer Vertragsumgebung müssen Sie Wert liefern oder nicht für die Zeit berechnen, wenn du bist.MSC15«t.»

Wie für rate-;-Sie finden Ihr Niveau -;-Persönlich Ich verlange mehr für Projekte, in denen ich mehr Verantwortung habe.(-oder die nicht wie Spaß aussehen ).-Ich lade weniger für Projekte wo I'-m lernen eine neue Technologie oder für Start-ups ,.-I'-ve arbeitete auch weniger Tage, aber hielt meine Rate stabil , .-Aber don-MSC9-t akzeptieren einen niedrigen ?--Ball-Rate , ;-you...'-re ein Profi und Sie sollten als solche bezahlt werden

Schlussfolgerung

Nun, dass es ' ist es . Aus IM' Aus von der Arbeit heute und morgen für meine gran-' Begräbnis und offen gesagt Panik ein wenig, dass ich eine große Legacy-System zu lernen haben, , Aus so dachte ich, I.' Ausgepeitscht meine Gedanken darüber, was auf diesen Systemen funktioniert wie & Aus den Herausforderungen

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.