Oppgrader Unleash til Optimizely Full Stack for utrulling + eksperimentering

Unleash er en norsk løsning for feature flag / feature toggle (funksjonsflagg) som en del utviklere i Norge har kjennskap til. Denne artikkelen vil besvare spørsmålene om hvordan Unleash-brukere enkelt kan oppgradere til en full plattform for utrulling - og samtidig få tilgang til eksperimentering. Dette for å kunne teste, eksperimentere og optimalisere opplevelser for å sørge for at det som utvikles skaper verdi.

Optimizely Logo

Skrevet av:

Optimizely Norge

Installasjon og tilgang

Benytter dere Unleash i dag, så kontakt oss i Norge på info@optimizely.no for en gratis og uforpliktende Rollouts Free konto. Alle eksempler og all kode nedenfor kan implementeres med denne kontoen. Kontoen er uten tidsbegrensning og kan disponeres som dere ønsker.

Eksempelkode nedenfor demonstrerer Javascript API for klienter (se Quickstart (Browser) og servere (se Quickstart (Node). Det finnes også Quickstart dokumentasjon for andre plattformer og språk.

Alle SDK for klienter, servere, native apps samt egen mikrotjeneste finnes for øvrig under Optimizely på Github.

Quickstart eksempel

Vi har tatt utgangspunkt i et eksempel fra Unleash sin kom-i-gang dokumentasjonen og implementert dette med Optimizely verktøy og kode. Optimizely Full Stack har grafisk grensesnitt for administrasjon, og støtter også komplett REST API typisk for Continuous Integration (CI) og automatisering.

Unleash:

import { UnleashClient } from 'unleash-proxy-client';
const unleash = new UnleashClient({
  url: 'https://app.unleash-hosted.com/demo/proxy',
  clientKey: 'proxy-123',
  appName: 'my-webapp',
});
// Used to set the context fields, shared with the Unleash Proxy
unleash.updateContext({ userId: '1233' });
// Start the background polling
unleash.start();
if (unleash.isEnabled('proxy.demo')) {
  // do something
}

Optimizely:

const optimizely = require("@optimizely/optimizely-sdk");
const optimizelyClient = optimizely.createInstance({
  sdkKey: "<Your_SDK_KEY>"
});
optimizelyClient.onReady().then(() => {
  var user = optimizelyClient.createUserContext('1233');
  var decision = user.decide('proxy.demo');  
  if (decision['enabled']) {
    // do something
  }
});

Gjennom Optimizely Full Stack parametere, varianter, variabler og strategier for utrulling støttes all sentral funksjonalitet i Unleash - og mer. Se spesielt håndtering av Audience for målrettet utrulling.

For mer informasjon om utrulling vises det til Optimizely Full Stack Javascript (Node) quickstart.

Eksperimentering og testing

Unleash har ingen funksjonalitet for eksperimentering av statistisk verdi. Ut over en mulighet for toggle på enkle variasjoner av flagg finner vi ingenting i Unleash dokumentasjonen om eksperimentering,og A/B/n testing artikkel fra juli 2021 viser bare at informasjon om variant kan sendes til Google Analytics.

I Optimizely finnes denne funksjonaliteten som "Notification listeners". Trivielt eksempel fra Unleash kan enkelt gjenskapes i Optimizely Full Stack, men for denne gjennomgangen har det mye større effekt å vise verdiene av hva en plattform for eksperimentering kan levere ut over feature flags/feature toggles.

Eksperimentering i Optimizely Full Stack bygger direkte på feature flag som introdusert ovenfor. Vi kan direkte teste variasjoner som del av utrulling, fordele trafikk som vi ønsker, og benytte eksperimentering og A/B/n tester som del av en større strategi for utrulling. Det er lett på definere komplekse strategier som for eksempel at en funksjon skal ut til alle beta-brukere, men hvor alle Android brukere skal teste 2 potensielt bedre varianter. Når vi snur dette behovet i en logisk fornuftig rekkefølge for evaluering, så ser det slik ut:

Rollout-rules.png

Når det kommer til hvordan koding av eksperimenter skjer, så er den ekstremt hyggelige meldingen at; det er ingen kode som skal inn! Vi har allerede koden implementert for å vise de variasjoner vi har definert. Vår egen kode ser ingen forskjell på om brukeren får en variant som del av utrulling eller eksperimentering – og det gjør faktisk ingen forskjell:

// "product_sort" corresponds to a flag key in your Optimizely project
let decision = user.decide('product_sort');
// same variable from rollout or experiment
let sortMethod = decision.variables['sort_method'];

Metrics

Men; for å gjennomføre et nyttig eksperiment må vi legge til metrics - måltall for verdiene vi ønsker å bruke til å vurdere eksperimentets suksess. Det kan defineres så mange metrics som ønskelig. Og metrics følger hver eneste session, og hver eneste event blir tatt vare på for analyse.

I forlengelsen av product_sort eksempelet så kan vi for eksempel tracke en lang rekke events for brukerens reise gjennom en handleopplevelse. Her er noen idéer for implementering i kode som også beriker events med supplerende informasjon:

user.trackEvent('add_to_cart', {product_sku: '24AB', view_time: 8904})
user.trackEvent('purchase', {revenue: 6423});

Rapportering

Kontinuerlig testing og evaluering er verdifullt for utvikling og forbedringer. Løsningen for utrulling må også kunne stille spørsmål – og naturligvis vise svar:

Experiment-results.png

La oss teste!

Har dere Unleash i produksjon i dag, så kontakt oss i Norge på info@optimizely.no for en gratis og uforpliktende Rollouts Free konto. Kontoen er uten tidsbegrensning og kan disponeres som dere ønsker.