Wann würde man die Abwärtskompatibilität zugunsten einer neuen und verbesserten Schnittstellenimplementierung aufgeben? [geschlossen]

11

Ich arbeite seit mehr als zehn Jahren bei derselben Softwarefirma. Als Ergebnis habe ich eine große Codebasis mit verschiedenen objektorientierten Programmiersprachen implementiert. Ich war ein Anfängerprogrammierer, als ich meine Karriere begann, und ich wusste nicht viel über gute Schnittstellen- und Klassendesignprinzipien. Ich würde gerne glauben, dass sich meine Designfähigkeiten im Laufe der Zeit verbessert haben, aber ich habe jetzt aufgrund von Bedenken hinsichtlich der Abwärtskompatibilität immer mehr Schwierigkeiten, meinen früheren Code zu verbessern. Mein Code wird von einer großen Anzahl von Kunden als Teil der Produkte verwendet, die mein Unternehmen verkauft.

Meine Frage ist: Wann sollte man aufhören zu versuchen, die Abwärtskompatibilität alter Schnittstellen aufrechtzuerhalten und die Kugel für die Implementierung eines brandneuen Designs zu beißen?

Ich denke, irgendwann kommt die Beibehaltung der Abwärtskompatibilität zu einer so großen Belastung, dass nützliche Änderungen an den Schnittstellen unmöglich werden. Hat jemand ähnliche Bedenken gehabt, wer kann ein Feedback geben?

Kavka
quelle
3
I think there comes a point where keeping backward compatibility becomes such a big burden that useful changes to interfaces become impossible.- Und ich denke, Sie haben dort Ihre eigene Frage beantwortet ...
Yannis
(1) Ist das kommerziell? (2) Zahlen Kunden kontinuierlich Supportgebühren, um die Schnittstelle / Implementierung zu nutzen? (Versus eine einmalige Zahlung)
Rwong
Ich arbeite an kommerzieller Software, die Kunden für den Erstkauf und eine Gebühr bezahlen, wenn sie bei der Wartung bleiben möchten.
Kavka

Antworten:

5

Während "wann" eine gute Frage ist, denke ich, dass "wie" noch relevanter ist. Es kann schwierig sein, einen bahnbrechenden Übergang so durchzuführen, dass Benutzer nicht frustriert oder unglücklich werden. Einige Punkte zu berücksichtigen:

  • Kommunizieren Sie mit Ihren Kunden / Kunden rechtzeitig vor einem Übergang. Erklären Sie, warum und wie es implementiert wird. Als Gründe gelten Sicherheit, Leistung, Stabilität und zukünftige Flexibilität.
  • Wenn Sie trotzdem eine saubere Pause machen, bitten Sie um Feedback.
  • Wenn es Entwickler von Drittanbietern gibt, stellen Sie sicher, dass Sie deren Eingaben so weit wie möglich einbeziehen.
  • Wenn es möglich ist, stellen Sie eine Kompatibilitätsebene bereit.
  • Stellen Sie eine umfassende Upgrade-Anleitung bereit.
  • Machen Sie das Upgrade so einfach und schmerzlos wie möglich. Minimieren Sie die Schmerzen Ihrer Benutzer, auch wenn dies für Sie etwas mehr Arbeit bedeutet.
  • Wenn Sie eine Gebühr erheben, gewähren Sie einen Rabatt für Upgrades auf die neue Version.
  • Fügen Sie in einer neuen Version mindestens einige neue und nützliche Funktionen hinzu, um Anreize für das Upgrade zu schaffen. Dies ist besonders wichtig, um das Upgrade für Manager attraktiver zu gestalten.
  • Wenn Sie eine Pause machen, machen Sie es das letzte Mal, wenn Sie eine brauchen. Das bedeutet eine umfassende Planung im Voraus und die Sicherstellung, dass alles richtig eingerichtet ist.
  • Wenn Sie eine Benutzeroberfläche haben, können Sie Änderungen daran vornehmen. Denken Sie eher an Aktualisierung als an Neugestaltung. Für nicht-technische Benutzer können drastische Änderungen der Benutzeroberfläche von einer Version zur anderen eine große Ursache für Frustration sein.
  • Ihre neue Version sollte deutlich stabiler und leistungsfähiger sein als die alte. Geben Sie Ihren Benutzern keinen Grund, das Upgrade erneut zu senden. Veröffentlichen Sie keine neue Version ohne vorherige umfangreiche Tests (Geräte-, Integrations- und Betatests).
  • Behalten Sie die alte Version gleichzeitig über einen längeren Zeitraum bei. Wenn Sie sich dazu entschließen, den Support einzustellen und den Support einzustellen, geben Sie mindestens 6-12 Monate im Voraus Bescheid, mehr, wenn Sie können.
  • Können Sie es sich leisten, zwei Versionen gleichzeitig in Bezug auf Finanzen und Personal zu warten? (Aus geschäftlicher Sicht sollten Sie die Unterstützung der alten Version erst einstellen, wenn Sie es sich leisten können, die verbleibenden Clients zu verlieren, die an der alten Version festhalten und kein Upgrade durchführen möchten. Dieser Zeitpunkt sollte bei Ihren Kosten liegen Wenn Sie es beibehalten, überwiegen Ihre Gewinne daraus.)
  • Verpflichten Sie sich, Sicherheitsupdates für einen bestimmten Zeitraum durchzuführen, nachdem die alte Version bei Bedarf eingestellt wurde.
  • Auch hier ist die Kommunikation während des gesamten Prozesses enorm. Lassen Sie Ihre Benutzer / Kunden / Kunden zu keinem Zeitpunkt verlassen. Ihre Loyalität und Leidenschaft ist das Fundament Ihres Geschäfts. Stellen Sie sicher, dass Sie auf ihre Fragen in Ihrem Blog oder in Ihren Foren antworten. Der soziale Faktor ist nicht zu unterschätzen.

Was das "Wann" betrifft, haben Sie wahrscheinlich eine bessere Idee für Ihre Anwendung als jeder andere. Im Allgemeinen kann es jedoch Zeit für eine saubere Pause sein, wenn Ihre technischen Schulden und Ihre Architektur die Stabilität vollständig beeinträchtigen, eine angemessene Leistung verhindern und die Entwicklung neuer Funktionen überwältigend oder unnötig schwierig machen.

Alles, was gesagt wurde, machen Sie diesen Schritt nicht leichtfertig. Selbst wenn man es richtig macht, ist es eine große Sache, die Abwärtskompatibilität zu brechen. Sie sollten nachdrücklich in Betracht ziehen, zuerst Ihre Testabdeckung und das Refactoring zu erhöhen, und wenn möglich, bevor Sie eine Pause in Betracht ziehen.

VirtuosiMedia
quelle
1
+1: Pragmatische Lösung. Die Frage war schließlich ganz klar: "Ich denke, irgendwann wird die Beibehaltung der Abwärtskompatibilität zu einer so großen Belastung, dass nützliche Änderungen an den Schnittstellen unmöglich werden." Da dies der Fall ist, ist es sinnvoll, dies mit spezifischen Anleitungen zur weiteren Vorgehensweise zu behandeln.
S.Lott
2

Im Allgemeinen stimme ich James Anderson zu. Nach meiner Erfahrung gibt es jedoch zusätzliche Aspekte, die möglicherweise berücksichtigt werden müssen und auf eine Option hinweisen, die tatsächlich die Entwicklung von Schnittstellen ermöglicht.

Dieses Beispiel stammt aus einem der Teams, mit denen ich zusammenarbeite. Sie versenden ein Produkt regelmäßig, mindestens einmal im Monat, manchmal sogar wöchentlich. Kunden werden aufgefordert, ein Upgrade durchzuführen, da neue Funktionen und neue Plattformen nur in neueren Versionen unterstützt werden. Das Upgrade ist einfach und Kunden können sogar Versionen dazwischen überspringen. Ein Downgrade wird nicht unterstützt. Außerdem werden Versionen nur 3 Jahre lang unterstützt. Danach gibt es eine Nachfrist von einem Jahr, wenn sich die Wartungsgebühren verdoppeln.

Infolgedessen aktualisiert die überwiegende Mehrheit - etwa 95% der Kunden - regelmäßig, mindestens einmal im Jahr. Dies bedeutet auch, dass Sie schrittweise neue Schnittstellen einführen können.

Wie wäre es mit alten Schnittstellen? Die Technik, die dieses Team verwendet, besteht darin, alte Schnittstellen als "End-of-Life" zu deklarieren. Dann gibt es einen Zeitraum von 12 Monaten, in dem die neue Schnittstelle verfügbar ist und die alte Schnittstelle noch nicht in den Ruhestand versetzt wurde. Die neuen Schnittstellen bieten bessere Funktionen als die alte Schnittstelle, daher gibt es zwei Anreize: Das Ende der Lebensdauer der alten Schnittstelle und die neue Schnittstelle sind viel besser.

Die konkrete alte Schnittstelle war in diesem Fall eine plattformspezifische Technologie, die derzeit schrittweise durch eine Service-Schnittstelle ersetzt wird, die auf der Standard-Mainstream-Technologie basiert.

Natürlich geschieht diese Änderung nicht über Nacht und es dauert viele Jahre, bis sie abgeschlossen ist. Aber es erlaubte, die Investition in die alte Technologie zu stoppen und stattdessen in die neue Technologie zu investieren. Kunden erhalten Unterstützung und haben einen Weg nach vorne. Die meisten von ihnen begrüßen auch die Umstellung auf neuere Technologien.

Beachten Sie jedoch, dass dieser spezielle Ansatz in Ihrem Szenario möglicherweise nicht funktioniert. Es funktioniert auf jeden Fall für das Team, mit dem ich zusammenarbeite.

Manfred
quelle
1

Sie haben hier bereits einige gute Antworten erhalten, daher möchte ich nur einen Hinweis auf einen sehr schönen Artikel von Joel Spolsky zu diesem Thema hinzufügen. Er diskutiert die Pläne, die Abwärtskompatibilität in IE 8 aufzugeben, was im Wesentlichen Ihrem Problem entspricht:

http://www.joelonsoftware.com/items/2008/03/17.html

Doc Brown
quelle
1

Die kurze Antwort lautet Nie!

Die Erfahrung zeigt, dass ein Rückgang der Abwärtskompatibilität Kunden und Benutzer zumindest stört und sie im schlimmsten Fall vollständig verliert.

Wenn Sie Ihre Benutzer bitten, Code neu zu schreiben, werden sie nach Beendigung des üblichen Fluchens von Ihnen und all Ihren Nachkommen denken: "Wenn ich trotzdem neu schreiben muss, sollte ich vielleicht einfach zu der netten ACME-Bibliothek wechseln, die ich gelesen habe so viel über? ".

Der Trick besteht darin, entweder die aktuelle Benutzeroberfläche so zu verbessern, dass die Abwärtskompatibilität nicht beeinträchtigt wird, oder eine völlig neue glänzende und offensichtlich überlegene Benutzeroberfläche anzubieten, während die ältere Benutzeroberfläche beibehalten wird. Irgendwann wird es Funktionen in der neuen Benutzeroberfläche geben, die in der älteren Benutzeroberfläche einfach nicht möglich sind, aber dies gibt den Menschen nur einen Anreiz, sich zu bewegen, ohne das Problem zu erzwingen.

Bearbeiten, um dies weiter zu verdeutlichen.

Was Sie als Programmierer denken, ist -

"Ich werde diese API verbessern und das System so gut wie möglich machen, und jeder wird mich bewundern."

Was die Benutzer Ihrer API denken werden, ist -

"A * * * e er denkt, dass meine Zeit und mein Zeitplan nicht wichtig sind. Ich muss aufhören, was ich tue, und meinen gesamten Code aus keinem anderen Grund umgestalten, als um sein Ego zu befriedigen. Wenn ich umgestalten muss, werde ich wechseln zu einer anderen API, nur um es ihm auch zu stecken. "

James Anderson
quelle
1
Das "Denken" wurde hinzugefügt, um zu betonen, wie wütend erzwungene Veränderungen Menschen machen können!
James Anderson
1
Noch nie? Meine Güte. Microsoft scheint mit jeder Hauptversion von Windows gegen dieses Prinzip zu verstoßen. Ich würde denken, dass "nie" in der Praxis überhaupt nicht befolgt wird. Es scheint, als wären "selten" oder "vorsichtig" oder "widerwillig" weitaus bessere Worte als "nie". Die Frage lautet: "Ich denke, irgendwann wird die Abwärtskompatibilität zu einer so großen Belastung, dass nützliche Änderungen an den Schnittstellen unmöglich werden." Können Sie dieses spezielle Problem beheben?
S.Lott
@ S.Lott Die Verwendung unnötig starker Wörter wie Nie, wenn Sie wirklich selten meinen, ist ein typischer Joel Spolsky-Effekt :)
maple_shaft
2
@ S.Lott: Sprechen wir über das gleiche Microsoft? Das Microsoft, dessen neuestes Betriebssystem noch die meisten Programme ausführen kann, die für das erste geschrieben wurden? Das Microsoft, das einem neuen Betriebssystem Code hinzugefügt hat, um sicherzustellen, dass ein beliebtes Spiel, das vom nicht spezifizierten Verhalten des alten abhängt, weiterhin funktioniert?
Michael Borgwardt
-1: Einige Kunden sind teurer als sie wert sind.
Jim G.
0

Dies ist wirklich eher eine Geschäftsentscheidung als eine technische. Normalerweise erfolgt dies im Rahmen einer Hauptversion (z. B. von Version 3.5 auf Version 4.0), und häufig werden die beiden Versionen für eine Weile parallel unterstützt. Dies bedeutet, dass Sie die alte Version warten, aber alle neuen Funktionen nur in der neuen Version angezeigt werden. Die alte Version wird unterstützt, solange das Unternehmen damit Geld verdient oder zumindest genug, um die Wartungskosten auszugleichen. Seien Sie bereit, dies dem Management vorzulegen.

TMN
quelle
0

Ich war auf der Kundenseite, also würde ich sagen, dass es wirklich davon abhängt, was Sie mit dem Übergang vorhaben.

Wir aktualisieren derzeit unser Kontosystem. Das Unternehmen, das das Upgrade durchführt, unterstützt auch die vorherige inkompatible Version. Sie planen, die Daten zu übernehmen und in das neue System zu verschieben, damit (theoretisch) alle alten Daten dort sind. Wir werden ein paar hundert Pfund für die Datenkonvertierung bezahlen. Kein Problem.

Vergleichen Sie mit einer früheren Situation bei einem anderen Unternehmen, für das ich gearbeitet habe. Der Lieferant hatte keine Möglichkeit, von den alten zu den neuen Systemen überzugehen. Dies brachte sie in die gleiche Situation wie alle anderen Lieferanten. Tatsächlich war ihre Situation schlimmer, weil wir wussten, dass sie nicht verpflichtet waren, uns bei den Upgrades zu helfen. Sie haben den neuen Vertrag nicht bekommen.

Sie haben die harte Arbeit geleistet, um Kunden zu gewinnen und zu halten. Wie können Sie den Übergang erleichtern?

Jaydee
quelle