Strategie für den Umgang mit A / B-Tests und Gitflow

8

Ich würde gerne wissen, mit welchen Strategien Sie mit A / B-Tests Ihrer App und Ihres Gitflow umgehen.

Überblick:

Wir sind ein Team von 6 Programmierern, die eine große App entwickeln und warten. Bisher haben wir an gitflow mit einigen Add-Ons zu dem von uns hinzugefügten Prozess gearbeitet, der ein paar Jahre lang perfekt funktioniert hat. In vereinfachter Form verwenden wir:

  • Master - Zweig (nur Code der veröffentlichten Versionen)
  • Release- Zweig, der nach den endgültigen Redundanztests im Master zusammengeführt wird
  • Hotfix, der nur in extremen Fällen mit dem Hauptzweig interagiert
  • Entwickeln, das die entwickelten Module ansammelt, sobald sie fertig und getestet sind, und schließlich in die Veröffentlichung übergeht.
  • / feature ist eine Gruppe von Features, die von der Entwicklung abweichen. Sobald sie fertig sind und die verschiedenen Testphasen bestanden haben, werden sie wieder zu Entwicklungsfunktionen hinzugefügt
  • / fix_develop ist eine Gruppe von Funktionen, die Korrekturen für Fehler aus früheren Versionen enthalten, die nicht zu dringend sind, um einen Hotfix zu starten.

Während sich die App weiterentwickelt, verfolgen wir mit dem UX-Team und anderen Stakeholder-Teams eine stärkere A / B-Teststrategie, bei der neue Versionen zwei Versionen haben und basierend darauf, wie unsere Benutzer die eine oder andere Version mögen, der endgültige Master werden Version, solange sie für unsere Benutzer sinnvoll sind.

Nachdem dies erklärt wurde, lautet die Frage : Welche Strategien haben Sie verwendet oder empfohlen, um Code von A / B- Testversionen in gitflow zu verwalten?

Die Optionen, die ich in Betracht gezogen habe, sind irgendwie inkonsistent, z. B. Verzweigung von A- und B-Zweigen vom Master und anschließende Verknüpfung des Release-Zweigs mit dem einen oder anderen, wobei ich nicht weiß, wie ich mit der Trennung des enthaltenen Codes vom Release-Zweig zum Feature umgehen soll Geäst. Eine weitere Option ist das Erstellen von A- und B-Zweigen und das Entwickeln von A- und B-Zweigen, was für meine Teamkollegen nach zu vielen Zweigen und Verwirrung klingt.

Ich höre deine Meinung, danke!

Update: Die von uns entwickelte App ist eine Android-App und wir implementieren die A / B-Tests mithilfe der PlayStore-Plattform für A / B-Tests. Dazu müssen zwei APKs erstellt und eine davon mit einem Rollout% hochgeladen werden. Um die Dinge einfacher zu halten, und da Änderungen manchmal größer sind als nur eine Tastenposition, haben wir beschlossen, keinen eigenen Schalter für A- und B-Tests in einer einzigen APK hinzuzufügen.

alexm
quelle
Sind diese nicht einfach Zweige?
Robert Harvey
1
Die Sache ist, dass diese Zweige in den Laden gehen, also alle Testprotokolle brechen müssten, wenn ich nur Code aus Feature-Zweigen hochlade. Was denken Sie?
Alexm
Sie werden den gesamten Überprüfungsprozess für eine Niederlassung durchlaufen, die möglicherweise nie zu einem tatsächlichen Produkt wird? Verdoppelt das nicht im Wesentlichen Ihre Arbeit?
Robert Harvey
Wie auch immer, das ist genau so, wie ich es jetzt sehe. Meine Idee mit dem Beitrag ist es, zu lernen, wie andere Leute mit dieser Angelegenheit umgehen und das anzuwenden, was ich für sinnvoll halte
Alexm
Es verdoppelt die Arbeit, aber es gibt wesentliche Dinge, die wir testen und beweisen müssen, wenn sie für unsere Benutzer funktionieren, die recht komplex sind. Dies alles geschieht, um den Boden des Fanels unseres aktiven Benutzers zu vergrößern. Es ist also eine Menge Arbeit. aber es macht Sinn zu testen
Alexm

Antworten:

11

Ich habe es immer so gesehen, als hätte ich eine einzige Codebasis, die beide Seiten / Ansichten / Formulare bedienen kann.

dh. Die Funktion wird mit zwei oder mehr Konfigurationen gekennzeichnet und bereitgestellt, oder die Methode "Bekommt der Benutzer A oder B" selbst ist Teil der App.

In diesem Fall haben Sie nur die eine Version des Codes, sodass Ihre Quellcodeverwaltung nicht ins Spiel kommt.

Dies ist weitaus vorzuziehen als die Alternative, mehrere Versionen der Codebasis mit unterschiedlichen Funktionen beizubehalten. Diese gehen in der Regel sehr schnell auseinander und Sie müssen dieselben Funktionen am Ende mehrmals implementieren.

Im Allgemeinen würde ich vorsichtig sein und den Umfang der Unterschiede einschränken, die A und B beide haben können, damit sie in eine generische Switch-Methode (z. B. Ansicht A oder Ansicht B) eingesteckt werden können und Sie die Gründe für unterschiedliche Statistiken verstehen können Sie verlassen Ihre Tests. zB war die Umsatzsteigerung mit der Tastenfarbe oder den Preisformeln verbunden?

Bearbeiten. zur Klärung der App

Sie können weiterhin Feature-Flags in einer Play Store-App haben und die Codebasis in mehr als eine Apk packen.

Ewan
quelle
3
Ja, das wollte ich vorschlagen: Feature-Flagging. Das einzige Problem dabei ist, dass es die Komplexität Ihrer Software erhöht, es sei denn, Sie beabsichtigen, die (nicht verwendeten) Funktionen in der Folgeversion zu entfernen.
Robert Harvey
1
Ja, ich bin normalerweise nicht für Feature-Flags, aber so habe ich es gemacht und gesehen. Ich bin sicher, wir haben alle die Schrecken gesehen, die auftreten können, wenn Sie mehrere Live-Versionen desselben Produkts in Filialen haben. Deshalb würde ich diesen Ansatz natürlich selbst scheuen.
Ewan
2
Sie können weiterhin Konfigurationseinstellungen haben und zwei Apks von derselben Codebasis erhalten. Sicher, Ihre App wird größer sein, aber ... die Verwaltung mehrerer Codebasen ist gelinde gesagt eine Herausforderung
Ewan
2
Sicherlich kann diese Art von Fluss in eine Ansicht abstrahiert werden
Ewan
1
Ja, für ein Unternehmensentwicklungsteam würde ich dies vorschlagen. In einer intensiv engagierten Unternehmensentwicklungsumgebung ist der Entwicklungsfluss für die Stammbasis für mich viel einfacher. Überprüfen Sie hier: trunkbaseddevelopment.com . Sam Newman hatte ein nettes Gespräch über das Umschalten von Funktionen in youtube: youtube.com/watch?v=lqRQYEHAtpk .
ivenxu
1

Ich stimme @Ewan zu, dass Feature-Flags der richtige Weg sind. Auf diese Weise können Sie dem Erstellungsprozess etwas hinzufügen, das APK entweder für einen A-Test oder einen B-Test bereitstellt. Aber wenn Sie eine Idee wollen, die keine Feature-Flags verwendet, ist hier eine, die ich nicht ausprobiert habe.

Sie können den allgemeinen Code in eine separate Bibliothek in einem separaten Repository ziehen. Anschließend verfügt jede Testversion über ein eigenes Repository mit einem eigenen Gitflow- und Master-Zweig, der bereitgestellt werden kann.

Dies erfordert am Anfang mehr Aufwand, da der gesamte allgemeine Code in die Bibliothek (en) gezogen werden muss, auf die dann im Repository verwiesen wird. Ich glaube jedoch, dass dies nach der Ersteinrichtung die Entwicklung neuer Funktionen für den A / B-Test rationalisieren kann.

** Auch dies ist nur eine Idee und nichts, was ich persönlich getan habe.

DFord
quelle
Ja, das macht Sinn, wir haben eine Bibliothek mit den Hauptfunktionen (C ++) und dann Consumer-Apps (Android und iOS), die nur als Schnittstellen- und Service-Bereitsteller dienen. Was wir ändern, ist nur die Art und Weise, wie die App dem Benutzer präsentiert wird. Also ja, das würde für A / B-Tests in Android funktionieren. Ich möchte jedoch, dass der Code in einem Repository zentralisiert wird. Daher suche ich nach einer Gitflow-Strategie in der Mitte: "Kopieren aller Zweige für A und B" und "Nur ein A- und B-Feature oder einen normalen Zweig" was ein schmutziges Repo bedeuten würde ".
Alexm
0

Da Ihre App bereits ausgeführt wird und einige Benutzer hat, schlage ich eine der folgenden Optionen vor:

  • Ich empfehle dringend, dass Sie ein Design-Denken durchführen, bevor Sie ein neues großes Feature implementieren.
  • Wenn Sie die A / B-Tests noch durchführen müssen, empfehle ich Ihnen, den normalen Gitflow beizubehalten und einen A-Zweig und einen B-Zweig zu haben .

Quellcodeverwaltung

In Bezug auf A / B-Tests möchte ich Folgendes klarstellen:

  • Ein Zweig : Enthält Code zu einer Version der App. EG: A_HomeActivity, A_SettingsActivity usw.
  • B-Zweig : Enthält Code zur B-Version der App. EG: B_HomeActivity, B_SettingsActivity usw.

Ab diesem Punkt können Sie zwei Strategien verwenden:

  • Erstellen Sie zwei völlig unterschiedliche Versionen: A.apk und B.apk ; oder
  • Stellen Sie sicher, dass der B-Zweig auch Code aus dem A-Zweig enthält, und stellen Sie eine App bereit, die die beiden Flows verwenden kann . Der Benutzer lädt nur eine App herunter und hat die Möglichkeit, den neuen Flow zu Evaluierungszwecken einzuschalten. Ich habe so etwas von Bitbucket gesehen , bei dem nur wenigen Benutzern eine völlig neue Navigation zur Auswertung zur Verfügung stand. Nach einiger Zeit wurde diese neue Navigation zur Standardnavigation.

In beiden Fällen entfernen Sie nach dem Experiment einfach den Code für die veraltete Funktion / den veralteten Ablauf.

Emerson Cardoso
quelle