Wie man Kollegen dazu bringt, gemeinsame Lösungen anzuwenden

Wir arbeiten in kleinen Teams an wenigen Apps, die alle auf eine zentrale API setzen, die ebenfalls selbst entwickelt wird. Das Team, das an dieser API arbeitet, besteht ausschließlich aus erfahrenen Entwicklern.

Bei jeder Einführung wesentlicher Änderungen werden alle App-Teams gebeten, einen vollständigen Regressionstest durchzuführen und Probleme (falls vorhanden) zu melden.

Allgemein bekannt ist, dass dies die ultimative Situation für die Verwendung der API-Versionierung ist; Die App gibt an, auf welcher Version sie basiert, und kann dann bei Bedarf aktualisiert werden. Aktualisierungen der API sollten vorhandene Anwendungen nicht beschädigen. Dies würde auch Rollouts einfacher und schneller machen.

Die Idee der API-Versionierung wurde mit dem genannten Team jedoch schon früher angesprochen, nur um als „Versionierung wird zu einem Chaos werden“ abgetan. Und ich stimme zu, dass die API-Versionierung nicht die Lösung aller Probleme ist, aber ich denke, sie könnte unseren Freigabeprozess erheblich verbessern.

Für mich klingt das meistens nach einer Architektenentscheidung; Wir haben jedoch niemanden in der Rolle des Architekten. Die meisten Beteiligten (PU, QA) scheinen die Vorteile der API-Versionierung ebenfalls nicht wirklich zu sehen. Das ist für mich lächerlich, da es eine branchenübliche Arbeitsweise ist. Es erinnert mich an Leute, die Dropbox als VCS verwenden.

Was ist der beste Weg, um im Rahmen meiner Möglichkeiten zu pushen, ohne den Anschein zu erwecken, als würde ich versuchen, die Arbeit des anderen Teams zu erledigen?

Abgesehen von ihrem eigenen Widerwillen, ihren Code anzupassen, um die aktuellste API zu verwenden, welche echten Gründe wurden dafür genannt, dass die Versionierung „in ein Durcheinander“ geraten ist? Welche Position bekleiden Sie in den genannten Teams?
all app teams are asked to do a full regression testHaben Sie Beweise dafür, dass Ihnen die fehlende Versionierung übermäßigen Kummer bereitet?
Common knowledge dictates that this is the ultimate situation to use API versioningIch möchte nicht streiten, ob dies als Allgemeinwissen bezeichnet werden kann (ich habe meine Meinung, aber es ist nicht wichtig). Wie auch immer, Sie überzeugen die Leute nicht mit it's an industry standard way of working, Sie überzeugen die Leute mit dem, was ihnen Ihre vorgeschlagene Praxis im Detail nützen kann.
Nun, es könnte chaotisch werden, wenn Sie mehrere Apps haben, die alle auf verschiedenen Versionen sind, und sie sich weigern, ihren Code zu aktualisieren, um die neueste Version zu verwenden. Vor allem, wenn der Grund für die neue Version der API eine Sicherheitslücke oder ein schwerwiegender Fehler ist. Die fehlende Versionierung zwingt sie dazu, die aktuellste API zu verwenden, und ermöglicht es den Entwicklern, sich auf einen Codesatz zu konzentrieren und sich keine Gedanken über Benutzer zu machen, die ältere Versionen verwenden.
Es ist schwer vorstellbar, wie dies zu etwas anderem als einem Streit über technische Vorzüge werden kann, abhängig von Kontextdetails, die nur dem Fragesteller und seinen Mitarbeitern bekannt sind.
Wenn Sie über "Aktualisierungen der API" schreiben, beziehen Sie sich auf die Änderung einer Schnittstelle (Java-Schnittstelle, abstrakte Klasse, AC-Methodensignatur oder eine REST-API) oder auf eine Änderung der Implementierung einer solchen (wie eine oder mehrere konkrete Java-Klassen , ac-Bibliothek oder -Modul, ein Dienst) ohne Änderung der Schnittstelle?

Antworten (4)

Aus Ihrer Beschreibung geht nicht hervor, dass die API-Versionierung in diesem speziellen Szenario erforderlich oder sinnvoll ist. Ich vermute, die Notwendigkeit ist auch den anderen Ingenieuren, von denen Sie sprechen, nicht klar. Und Ausdrücke wie „allgemein bekannt“ und „Industriestandard“ sind eine Art Code für „andere Leute tun es, also sollten wir es auch tun“, was ein Argument der Autorität ist, das allein selten überzeugend ist, wenn Sie andere Menschen davon überzeugen müssen, etwas zu tun Sie wollen, dass sie es tun.

Was Sie tun müssen, wenn Sie dies wirklich tun möchten, ist, zunächst ein bestimmtes Problem zu identifizieren, das Sie gerade haben, und dann die Argumente für die API-Versionierung darauf aufzubauen. Ein Beispiel:

Wir haben letzten Monat ## Stunden damit verbracht, App A neu zu schreiben, weil API-Änderungen alles kaputt gemacht haben. Da wir dafür ## ausgegeben haben, konnten wir Feature Z für Kunde Y nicht hinzufügen und haben X $ Umsatz verpasst. Anstatt unsere API zu beschädigen, hätten wir bei Versionierung 5 Minuten für die API-Änderung aufgewendet, Z abgeschlossen und X + W $ verdient, weil wir uns einen Vorsprung bei Feature V verschaffen konnten.

Beachten Sie, dass diese Begründung überhaupt nicht abstrakt ist; es hängt ganz von Dingen ab, die messbar sind. Alle messbaren Dinge sind Dinge, die ein nicht technischer Manager verstehen kann: Geld, Zeit (was Geld ist), abrechenbare Funktionen (die je nach Geschäftsmodell in Geld umgewandelt werden könnten).

Als "Senior Engineer" möchte ich niemals mehrere API-Versionen pflegen, weil das eine Menge Arbeit ist, mit der ich mich nicht beschäftigen möchte. Als "Typ, der tut, was mein Chef mir sagt", werde ich mich total verbiegen, wenn mein Chef mir sagt, dass wir mehrere Versionen pflegen müssen, um eine nicht unerhebliche Menge Geld zu sparen.

Anhand der von Ihnen gemachten Angaben kann ich schwer sagen, ob Sie Recht oder Unrecht haben. Aber ich versuche mal deine Frage zu beantworten:

Was ist der beste Weg, um im Rahmen meiner Möglichkeiten zu pushen, ohne den Anschein zu erwecken, als würde ich versuchen, die Arbeit des anderen Teams zu erledigen?

Sehr wenig, wie es aussieht, denn die Entscheidung über die Versionierung (oder deren Fehlen) scheint mir ein Teil der Teamarbeit zu sein. Aber wenn Sie trotzdem versuchen wollen, sie zu überzeugen, hier ein paar Vorschläge:

  • Beziehe dich nicht auf „Allgemeinwissen“, wenn es Allgemeinwissen wäre, würden dir bereits alle zustimmen

  • Sei bereit, falsch zu liegen. Es gibt ein Team von Senioren, die sich hauptberuflich mit dem Thema beschäftigen und alle eine andere Meinung haben als Sie, Sie liegen höchstwahrscheinlich falsch.

  • Versuchen Sie zu verstehen, warum die Wahl getroffen wurde und welche Probleme die Senioren erwarten

  • Beschreiben Sie Ihren Problemfall (den Grund, warum Sie eine Versionierung benötigen) so gut wie möglich und Ihre Hausaufgaben, um herauszufinden, ob es andere Lösungen für Ihr Problem gibt.

  • Finden Sie heraus, dass andere Teams von der Implementierung der Versionsverwaltung profitieren würden

Dann führen Sie alle Ihre Recherchen in einem Fall zusammen, wie die Versionierung dem Unternehmen nützen könnte (seien Sie bereit, Zahlen vorzulegen), wie die größten Bedenken gegen die Versionierung angegangen werden könnten und mit welchem ​​Aufwand sie implementiert und gewartet werden kann.

Wenn Sie nicht nur offen dafür sind, dass jemand anders Ihre Meinung ändert, sondern aktiv darauf hinarbeiten und niemand Ihre Meinung geändert hat, während Sie all die Forschungsergebnisse gesammelt haben, haben Sie sehr wahrscheinlich Recht und andere werden nicht widersprechen können :)

Dies ist eines dieser Szenarien, in denen Sie jetzt Zeit verbringen, um Zeit für spätere Szenarien zu sparen. Die Leute, die Kosten kalkulieren, berücksichtigen selten zukünftige Einsparungen, weil sie erwarten, dass sie nicht eintreten werden. Sie wollen in der Regel immer nur kurzfristig sparen. Infolgedessen sind Sie gezwungen, schnell schlechten Code zu schreiben und ihn in jeder nachfolgenden Version zu verbinden.

Dies wird zu ziemlich lustigen, aber frustrierenden Szenarien führen, in denen Sie Code wie diesen sehen werden

var oldDate = api.convertDateTime(input);
//.....some code
var newDate = api.convertDateTime1(input, format);
//.....some code
var finalDate = api.convertDateTime2([oldDate, newDate], format);

Und der Grund ist einfach, niemand möchte zurückblicken und sehen, wo api.convertDateTime verwendet wurde, und alle Verwendungen beheben, also erstellen sie eine neue Version. Aber es gibt keinen Unterschied in dem, was es tut, also bekommst du eine Nummer. Später passiert es dann wieder, jemand möchte ein Format hinzufügen, und es ist erforderlich, aber er möchte nicht zurückgehen und alle alten Verwendungen korrigieren, also erstellen sie eine weitere neue Version. Und schließlich möchte jemand mehrere Daten in einer Zeile konvertieren, also eine weitere neue Version erstellen und nicht jede alte Verwendung einem Regressionstest unterziehen, also noch eine neue Version.

Und so wird eine schlechte Version der API-Versionierung geboren.

Also, wie kann man das vermeiden? Sie müssen die Leute davon überzeugen, dass Zeitverschwendung jetzt das Chaos vermeidet, das ich gerade beschrieben habe. Das ist nicht einfach und wirkt sich stark auf die Unternehmenskultur aus. Es spielt auch eine große Rolle, ob Ihre Abteilung ein Cost Center oder ein Profit Center ist. Ein Profitcenter darf oft vorausplanen. Eine Kostenstelle ist in der Regel erforderlich, um die Kosten jedes Jahr so ​​niedrig wie möglich zu halten, egal wie viele technische Schulden Sie anhäufen.

Ihre Argumentation ist also einfach:

Sie müssen einige Beispiele dafür zeigen, dass die Versionierung schief gelaufen ist.

Zeigen Sie einige Beispiele für eine bessere Versionierung.

Und, was am wichtigsten ist, stellen Sie die Zeitkosten zwischen den Methoden grafisch dar, damit Ihre auf lange Sicht billiger aussieht. Wenn Sie mit Nummern bewaffnet kommen, werden Sie nicht ignoriert.

Meiner Erfahrung nach wird normalerweise ein Kompromiss gemacht, bei dem eine erste Version der API erstellt wird und anschließend ein Versionierungssystem eingebaut wird, unter der Annahme, dass es anfangs zu viele Versionen geben wird, um den Überblick zu behalten, also warten Sie auf die API zu stabilisieren und zu reifen, bevor Sie sich Gedanken über Versionen machen. Dann wird Zeit darauf verwendet, alle alten API-Verwendungen zu aktualisieren, um eine Version bereitzustellen, sobald eine vorhanden ist, oder alle Verwendungen ohne angegebene Version werden als Version 1 angenommen.

Nie zustande kommen oder schwer zu quantifizieren? Hatte neulich einen, 30 Datenbankmodelle zu machen. Hat erstmal 10 Stunden gedauert. 29 dauerte Sekunden, warum? Weil ich in der Lage war, einen zukünftigen Prozess dafür zu machen. Über 1000 Modelle existieren jetzt in 2 Wochen. Modelle brauchen in der Regel jeweils eine halbe Stunde manuell. Was ist also die Ersparnis? Und ein Bonus ist, dass jetzt alle Modelle konsistent sind, egal welcher Entwickler sie erstellt. So kommen zukünftige Einsparungen oft zustande, aber auf unerwartete oder schwer kalkulierbare Weise. Deshalb konzentriert sich meine Antwort darauf, sie zu berechnen.
@JoeStrazzere Gotcha, ich habe meine Antwort so bearbeitet, dass sie das enthält

Anstatt sich Gedanken über eine bestimmte Lösung für Ihr Problem (z. B. Versionierung) zu machen, konzentrieren Sie sich darauf, welche Uptime-/Change-Management-Prinzipien Sie von der API erfüllen müssen. Es ist fair zu sagen, dass API-Änderungen niemals eine Clientanwendung unerwartet beschädigen sollten, dass die API sehr wenig Ausfallzeit haben sollte und dass alle wichtigen Änderungen an der API so früh wie möglich angekündigt werden.

Wenn Sie sich auf diese Prinzipien einigen können, lassen Sie die API-Entwickler (oder die Gruppe) entscheiden, wie Sie diese Ziele erreichen.