Wenn JavaScript nicht ausreicht

Wie Ihr schon im ersten Teil unserer Reihe “Optimizely aufgebohrt” erfahren konntet, wird Optimizely als Tool natürlich umso interessanter, wenn man sich über die Standardfunktionalität hinaus auch z.B. mit den API function calls auseinandersetzt. Nun stellen wir ein weiteres Szenario vor, bei dem bis auf das Ausspielen der Varianten das volle Optimizely Setup genutzt werden kann. 

Hütet Euch vor schlechten Trafficsplits

Leser des früheren Artikels kennen den Hintergrund: Wir sind bei unseren serverseitigen Tests im Rahmen eines Stackwechsels von PHP auf REACT auf unerwartete Probleme im Testing gestoßen, darunter fiel auch ein nicht erklärbarer Fehler im Trafficsplit. Statt wie in Akamai definiert einen 50/50 Split zu erhalten, verteilte sich der Traffic stets “zum Vorteil” neuer Varianten (z.B. 45/55). 

Ein “unreiner” Trafficsplit ist eine heikle Sache – und das tatsächlich schon bei kleineren (signifikanten) Abweichungen. Hand aufs Herz: Wer von Euch hat sich hierüber schon einmal Gedanken gemacht und das bei den eigenen A/B Tests kontrolliert? 🙂  Es geht überhaupt nicht darum, dass man stets gleich große Gruppen für eine statistische Analyse benötigt (das ist nicht der Fall). Solange man jedoch nicht ausschließen kann, dass es sich hierbei um einen systematischen Fehler handelt, macht eine statistische Auswertung kaum Sinn. Ganz salopp erklärt: Angenommen, die 10% Differenz zwischen 45% (Control) und 55% (Variation) bildet eine Gruppe stark konvertierender User (die sich nicht gleich auf beide Gruppen verteilen, sondern aufgrund eines Ziehungsfehlers nur in Gruppe B auftauchen): Wie aussagekräftig ist dann Eurer Meinung nach ein entsprechender CR Vergleich? Ein solcher Stichprobenziehungsfehler kann Euch die Aussagekraft Eurer Statistik völlig verbauen.

Unser CDN reagiert auf Optimizely

Um diese Splitproblematik anzugehen, wollten wir neben der Stats Engine auch gerne Optimizelys Traffic Allocation & Audience Definition Funktionalität nutzen. Wir mussten es lediglich schaffen, dass unser CDN auf die von Optimizely definierten Buckets reagiert. Ein normales Redirectexperiment war ausgeschlossen, da die neue Seite unter der gleichen URL erreichbar war wie die Kontrollvariante. Daher haben wir folgendes, einfach zu erklärendes Szenario gebaut: Der Test wird wie gewohnt in Optimizely konfiguriert – vom URL Targeting über die Traffic Allocation zur Audience Definition läuft alles wie gehabt. Die Variationen hängen jedoch auf unseren Servern. Besucht der User nun die Zielseite, startet Optimizely das Bucketing – in der Kontrollgruppe geschieht nichts, der User sieht wie gewohnt Variante A. Wird der User jedoch in Gruppe B eingeteilt, schmeisst Optimizely einen Cookie in den Browser des Users und lädt die Seite neu. Und was nun passiert ist ganz einfach: Unser CDN reagiert auf den Cookievalue – und spielt ab jetzt jedes Mal Variante B aus, wenn der User die Seite besucht.

Bevor nun alle im Kollektiv aufstehen und laut “Ladezeitverzögerung” schreien: Guter Punkt. Diese lag bei uns bei maximal 120ms. Einmalig – beim Erstbesuch. Das ist gegenüber einem falschen Trafficsplit und etwaigen Trackingfehlern in GA ein Tradeoff, den man uneingeschränkt eingehen kann

Nieder mit der clientside-Iteration #2!

Der benötigte Code fällt auch hier sehr überschaubar aus. In der Kontrollgruppe bleibt der Codeeditor leer, die Variante erhält folgende Zeilen:

Optimizely vielfältig einsetzen

Das Experiment war für uns ein weiterer, wichtiger Schritt zur “Erkundung” unseres Testingsetups – und ein voller Erfolg. Wir hatten durch dieses Vorgehen einen gewohnt guten Split, erhielten die gewünschte Audiencezuteilung sowie auch alle Vorteile der automatisierten statistischen Auswertung. Auch hier gilt wieder: Inwiefern das hilfreich ist oder einen Mehrwert bietet, hängt natürlich maßgeblich von der Fragestellung, der Intention oder auch dem Setup ab, das man für seine Tests nutzt.

Viel Spaß beim ausprobieren!

Jan
Jan
Autor
Psychologe, Web Analyst, Science Junkie, Star Wars Missionar und Gründer des Blogs

Hinterlasse einen Kommentar

Please enter your comment!
Please enter your name here