Was tun, wenn kritische Funktionen einer Abhängigkeit unterbrochen sind und die Entwicklung behindern?

12

Gestern habe ich an einem Rails 5-API-Projekt gearbeitet, in dem die Bibliothek " Acts as Taggable On" verwendet wird, damit Dinge Tags haben können (z. B. Fragen zu SE). Rails 5 ist derzeit in Alpha-Unterstützung. Derzeit gibt es einen PR, der einen Fehler behebt, der darauf wartet, in den Master integriert zu werden. Der Fehler führte dazu, dass mein Feature-Zweig auf halbem Weg zum Stillstand kam. Ich konnte die Funktionalität der Bibliothek nicht implementieren, da das Laden unterbrochen war.

Als schnelle Lösung habe ich einfach das Repo geklont, das Problem mit demselben Code behoben, den der PR hatte, und meine Gemfile (Dependency Version Control File) auf meine eigene Github-Abspaltung verwiesen, bis der Bugfix endgültig wieder mit dem Master verschmolzen ist.

Ich hatte das Glück, dass die Lösung einfach war ( und dass es bereits jemand getan hatte ), sodass ich das Problem umgehen konnte. Was aber, wenn diese Bibliothek für die Entwicklung meiner Anwendung von entscheidender Bedeutung war? Was ist, wenn der Bugfix, der meine Entwicklung stoppte, für andere kein weit verbreitetes Problem war , so dass sich der Fix nicht so schnell herumgesprochen hat wie diesmal?

Stellen Sie sich vor, dass diese Funktion vor der Entwicklung anderer abhängiger Funktionen abgeschlossen werden musste. Was tun Sie in dieser Situation? Was wäre, wenn Tagging für mich für den nächsten Entwicklungsschritt, bei dem sich alles andere darauf stützte , absolut entscheidend wäre - aber die Tagging-Abhängigkeit ist für meine Konfiguration fehlerhaft? Was macht man, wenn kritische Funktionalität einer Abhängigkeit die Entwicklung von (einem) Merkmal (en) behindert?

Und Schwertkämpfe auf Bürostühlen über Stunden oder Tage sind sicherlich keine Option ...

Chris Cirefice
quelle

Antworten:

19

Dies ist einer der Gründe, warum Sie Open-Source-Software verwenden, oder?

Sie könnten das gleiche Argument für "Was passiert, wenn meine sehr teure proprietäre Bibliothek mit geschlossenen Quellen plötzlich umfällt? Wird es bei [einem großen, monolithischen Softwareunternehmen] jemanden geben, der das Problem für mich behebt?" Mit Open-Source-Software haben Sie zumindest die Möglichkeit, diesen Fehler selbst zu beheben.

Wenn Ihre Software eine kritische Abhängigkeit von einer Open Source-Bibliothek aufweist, können Sie drei Maßnahmen ergreifen, um das Risiko zu verringern:

  1. Machen Sie sich mit der Codebasis vertraut und leisten Sie vielleicht sogar selbst Beiträge. Dies ist ein weiterer Grund, warum Sie sich für Open Source entschieden haben, oder?

  2. Haben Sie eine Ersatzbibliothek, wenn die erste Bibliothek ausfällt. Aus diesem Grund programmieren Sie auf Schnittstellen. damit Sie die Implementierung ändern können, wenn Sie müssen, richtig?

  3. Wägen Sie Ihren Wunsch nach Spitzenleistung mit Ihrem Stabilitätsbedürfnis ab (dh verwenden Sie keine Alpha-Software). Sie wussten, worauf Sie sich einlassen, richtig?

Robert Harvey
quelle
Danke für deine Antwort Robert; Ja, ich habe mich für Rails 5 entschieden und das Projekt nicht vollständig geplant. Ich wusste nicht, dass diese Bibliothek Kompatibilitätsprobleme mit Rails 5 haben würde Ich überwache das Github-Repo auf das Update. Ich denke, eine der wichtigsten Lektionen hier ist es , gut zu planen . Wenn ich eine Stunde länger recherchiert hätte, bevor ich mit der Entwicklung begonnen hätte, hätte ich das Problem gesehen!
Chris Cirefice
11

Die Lösung für die Entwicklung von Anwendungen, bei denen ein hohes Risiko besteht, dass Ihre Arbeit unterbrochen wird, besteht darin, keine Bibliotheken mit hohem Risiko zu verwenden. Langweilig und lahm, ich weiß ..

Sie sagten, dies sei eine Alpha-Version. Verwenden Sie Alpha-Releases nicht für kritische Projekte. Es ist nicht einmal eine Beta-Version, geschweige denn 1.0, so etwas ist zu erwarten. Der gesamte Punkt dieser Phase in einem Projekt besteht darin, Probleme zu finden und das Projekt zu härten.

Wenn Sie sich in dieser Situation befinden, müssen Sie im Grunde das tun, was Sie getan haben (wir haben genau dasselbe getan). Repariere es und PR das Projekt.

Die Lösung besteht jedoch darin, stabilere Bibliotheken mit verstandenen Funktionen und APIs zu verwenden oder zumindest die Abwärtskompatibilität zu einer stabilen Version aufrechtzuerhalten. Sie sollten vorsichtig sein, wenn Sie zu 100% auf etwas angewiesen sind, über das Sie keine Kontrolle haben und das Sie für den Erfolg benötigen.

Enderland
quelle
1

Es wird normalerweise empfohlen, Bibliotheken von Drittanbietern hinter Adaptern oder Wrappern zu verstecken, die Sie selbst geschrieben haben. Dies hat zwei Vorteile:

  • Sie können die Bibliothek eines Drittanbieters durch eine andere ersetzen, ohne Ihren Code zu ändern
  • Sie können den Rest Ihres Codes mit Ihrer eigenen Adapter-Schnittstelle programmieren. Im Falle eines vorübergehenden Problems mit der Bibliothek schließen Sie einfach Ihre eigene Stub / Fake- oder vereinfachte Version der Bibliotheksfunktionalität an. Auf diese Weise werden die Entwicklung und das Testen Ihrer nachgelagerten Funktionen nicht blockiert (auch wenn die Bereitstellung des vollständigen Programms noch aussteht).
jhyot
quelle