ISSUE WITH TRACKING? FAIL THAT BUILD! LAUNCH DAY SHIPPED IT! GO - - PowerPoint PPT Presentation

issue with tracking fail that build
SMART_READER_LITE
LIVE PREVIEW

ISSUE WITH TRACKING? FAIL THAT BUILD! LAUNCH DAY SHIPPED IT! GO - - PowerPoint PPT Presentation

ISSUE WITH TRACKING? FAIL THAT BUILD! LAUNCH DAY SHIPPED IT! GO TEAM! DID WE EVER FINISH the tracking? TWO WEEKS LATER 10 million events named REPLACEME . NOTHING ELSE. THE BIG DIVIDE CUE DATA BREAKING STUFF CUE PRODUCT IN TAG


slide-1
SLIDE 1

ISSUE WITH TRACKING? FAIL THAT BUILD!

slide-2
SLIDE 2

LAUNCH DAY

DID WE EVER FINISH the tracking?

SHIPPED IT! GO TEAM!

slide-3
SLIDE 3

10 million events named ‘REPLACEME’ . NOTHING ELSE.

TWO WEEKS LATER

slide-4
SLIDE 4

CUE DATA BREAKING STUFF IN TAG MANAGER CUE PRODUCT ROLLING IT OUT ANYWAY

THE BIG DIVIDE

slide-5
SLIDE 5

STEVE COPPIN-SMITH

HEAD OF ENGINEERING @ SNOWPLOW ANALYTICS

slide-6
SLIDE 6

TRACKING IS AS IMPORTANT AS THE FEATURE YOU’RE SHIPPING. SO TEST IT.

slide-7
SLIDE 7

SCHEMAS + BAD ROWS + QA PIPELINES

DATA QUALITY DATA ACCURACY

slide-8
SLIDE 8

COLLECTOR LOADER TARGET SCHEMAS BAD VALIDATE ENRICH

COSTLY TO RUN MINUTES TO PROCESS TRICKY TO QUERY STEPS WE DON’T NEED TO TEST MINUTES TO SPIN UP

slide-9
SLIDE 9

COLLECTOR SCHEMAS VALIDATE

SECONDS TO SPIN UP SPLIT SECONDS TO ARRIVE SIMPLE TO QUERY MINIMAL COSTS A SINGLE EXECUTABLE

BAD GOOD

slide-10
SLIDE 10

COLLECTOR SCHEMAS VALIDATE BAD GOOD

✓ ✓ ✓ X

DRIVES ASSERTS

slide-11
SLIDE 11

NIGHTWATCH.JS

✓ CROSS BROWSER ✓ EASY TO EXTEND* ✓ CUTEST LOGO

slide-12
SLIDE 12

'Add multiple products to cart' : function (browser) { browser .click('//a/span[text()="Shirt"]/..') .click('//*[@id="quantity"]/option[2]') .click('//button[@id="addToCart"]') .assert.containsText('//*[@id="cart"]', 'Shirt') } $ ✓ Testing if element contains text 'Shirt'

slide-13
SLIDE 13

'Add multiple products to cart' : function (browser) { browser .click('//a/span[text()="Shirt"]/..') .click('//*[@id="quantity"]/option[2]') .click('//button[@id="addToCart"]') .assert.containsText('//*[@id="cart"]', 'Shirt') .assert.noBadEvents() } $ x Expected 0 bad events, 10 found.

slide-14
SLIDE 14

'Add multiple products to cart' : function (browser) { browser .click('//a/span[text()="Shirt"]/..') .click('//*[@id="quantity"]/option[2]') .click('//button[@id="addToCart"]') .assert.containsText('//*[@id="cart"]', 'Shirt') .assert.noBadEvents() .assert.eventWithProperty({ 'schema': '.../cart_event/jsonschema/1-0-0', }, 2) } $ x Expected 2 events with properties, 1 found.

slide-15
SLIDE 15

'Add multiple products to cart' : function (browser) { browser .click('//a/span[text()="Shirt"]/..') .click('//*[@id="quantity"]/option[2]') .click('//button[@id="addToCart"]') .assert.containsText('//*[@id="cart"]', 'Shirt') .assert.noBadEvents() .assert.eventWithProperty({ 'schema': '.../cart_event/jsonschema/1-0-0', 'values': {'quantity': 2}, }, 1) } $ ✓ Expected 1 event with properties, 1 found.

slide-16
SLIDE 16

'Add multiple products to cart' : function (browser) { browser .click('//a/span[text()="Shirt"]/..') .click('//*[@id="quantity"]/option[2]') .click('//button[@id="addToCart"]') .assert.containsText('//*[@id="cart"]', 'Shirt') .assert.noBadEvents() .assert.eventWithProperty({ 'schema': '.../cart_event/jsonschema/1-0-0', 'values': {'quantity': 2}, 'contexts': [{ 'schema': '.../product_entity/jsonschema/1-0-0', 'values': {'name': 'Shirt', 'color': 'White'} }] }, 1) }

slide-17
SLIDE 17

THIS GOES BEYOND BUILDING ASSURANCE AROUND THE FEATURE YOU ARE SHIPPING

slide-18
SLIDE 18

✓ ✓ ✓ ✓ ✓ X

YOUR TEST SUITE

slide-19
SLIDE 19

DEVELOPMENT ✓ X WATCH TESTS PASS DEFINE TRACKING STRATEGY MEASUREMENT DEVELOPMENT MEASUREMENT

MORE MEASUREMENT ...

✓ X DESPERATELY ADD SOME TRACKING FIND OUT IT’S WRONG FIND OUT IT’S STILL WRONG

slide-20
SLIDE 20
  • Best. data.

ever.

slide-21
SLIDE 21

LINTING OK UNIT TESTS OK FEATURES OK TRACKING NOT OK BUNDLING DEPLOYING

slide-22
SLIDE 22

ISSUE WITH TRACKING? FAIL THAT BUILD!