Growing from an early stage startup to a national leader in financial literacy is no small feat, and there are a ton of lessons that we have learned at Greenlight as we have grown. Long gone are the days where we would ship something and cross our fingers hoping that it makes some kind of impact on our customers. Now we’re in a world where we can learn ahead of time how much impact a feature will have on the business, before we even launch! In today’s conversation, we’ll discuss how we use Optimizely’s feature flags in our microservice architecture using Optimizely Agent while keeping user IDs and context synchronized.
This session will cover:
How we set up Optimizely Agent and use it in a kubernetes deployment
How we created a user-aliasing service
How we access Optimizely both on the frontend and in the backend services.
How to build a full stack feature
How to manage the rollout using Optimizely’s feature flags
Overcoming Challenges of Experimentation on Service Oriented Architecture
1. Overcoming the Challenges of
Experimentation on a Service
Oriented Architecture
Lupin Campos & Stephen Schwahn
September 2020
2. Hi! We are Lupin and Steph :)
Lupin Campos
Director of Product Growth
Tech Startup Founder (Funnely)
Software Development Company Founder (Leanbirds & Condiminds)
Former Venture Partner @ 500Startups
Steph Schwahn
Growth Team Tech Lead
Tech Startup Founder (Crescendo)
Mobile App Development Company Founder (Plutonium Apps)
Georgia Tech Alumni, graduated with high honors.
8. Greenlight Financial Technology, Inc.
SOA with Optimizely Fullstack on Frontend
Web
App
Marketing
Site
Mobile
App Edge
Service
1
Edge
Service
2
Nested
Service
1
Nested
Service
2
Helper
Service
1
Backend
9. Greenlight Financial Technology, Inc.
SOA with Optimizely Fullstack on Frontend
Web
App
Marketing
Site
Mobile
App Edge
Service
1
Edge
Service
2
Nested
Service
1
Nested
Service
2
Helper
Service
1
Backend
Variant: Variant 1
Variable: FlowId = 6
10. Greenlight Financial Technology, Inc.
SOA with Optimizely Fullstack
Web
App
Marketing
Site
Mobile
App Edge
Service
1
Edge
Service
2
Nested
Service
1
Nested
Service
2
Helper
Service
1
Backend
User_id: '1234_4321'
11. Greenlight Financial Technology, Inc.
SOA with Optimizely Fullstack
Web
App
Marketing
Site
Mobile
App Edge
Service
1
Edge
Service
2
Nested
Service
1
Nested
Service
2
Helper
Service
1
Backend
User_id: '1234_4321'
30s 40s
400s 200s
5s
12. Greenlight Financial Technology, Inc.
SOA with Optimizely Fullstack
Web
App
Marketing
Site
Mobile
App Edge
Service
1
Edge
Service
2
Nested
Service
1
Nested
Service
2
Helper
Service
1
Backend
User_id: '1234_4321'
30s 40s
400s 200s
5s
14. Greenlight Financial Technology, Inc.
Solution: SOA with Optimizely Agent
Marketing
Site
Mobile
App Edge
Service
1
Edge
Service
2
Nested
Service
1
Nested
Service
2
Helper
Service
1
Backend
Feature or Experiment
Key: 'featureTest’
User_id: '1234_4321'
Optimizely
Agent
30s
Web
App
15. Greenlight Financial Technology, Inc.
In Practice….
Client 1
Client 2
Client n
.
.
.
Ambassador
(API Gateway)
Pod (3-30 running based on traffic)
Optimizely
Service
(Node.js)
Optimizely
Agentlocalhost:8080
Datafile sync
(every 30s)
localhost:3000
Exposes Optimizely Service
on service port 80
Service
grpc:80
pod-ip:3000
NodeJS Container Go Container (sidecar)
Datafile
pod-ip:3000pod-ip:3000
24. Greenlight Financial Technology, Inc.
New API Contract!
export type Context = UserIdContext | EmailContext | AnonymousIdContext | RegistrationIdContext | DeviceInfoContext
export type EmailContext = {
email: string
}
export type AnonymousIdContext = {
anonymousId: string
}
export type DeviceInfoContext = {
deviceOs: string,
deviceToken: string
}
export type UserIdContext = {
userId: string
}
export type RegistrationIdContext = {
registrationId: string
}
export function isFeatureEnabled(featureKey: string, context: Context, attributes?: Attributes)
export function getEnabledFeatures(context: Context, attributes?: Attributes)
...
25. 1Truly Full Stack
Experimentation
Through the ENTIRE user journey, from the
marketing landing page, through registration
services, and all the way to fundamental service
primitives