Thanks

Denver Dev Day!

#DenverDevDay

@saltnburnem

#DenverDevDay | #DeveloperCommunity

#DeveloperCommunity

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Chris DeMars

Senior Developer Advocate

@saltnburnem

@saltnburnem

#DenverDevDay | #DeveloperCommunity

  • International Speaker
  • Love spooky stuff
  • Tattoo collector
  • Competitive Paintball Player
  • Competitve Bass Angler

About Me

@saltnburnem

#DenverDevDay | #DeveloperCommunity

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Contest

  1. Follow me and @digitalocean on Twitter
  2. Scan QR Code
  3. Sign Up to try DO
  4. Take a screen shot of the confirmation email
  5. Tweet that picture and tag me (@saltnburnem and @digitalocean) saying, "I signed up Chris!"

@saltnburnem

#DenverDevDay | #DeveloperCommunity

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Contest

  1. Follow me and @digitalocean on Twitter
  2. Scan QR Code
  3. Sign Up to try DO
  4. Take a screen shot of the confirmation email
  5. Tweet that picture and tag me (@saltnburnem and @digitalocean) saying, "I signed up!"

Building Flexible UIs with Feature Flags

💪

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Flex that UI muscle!

CSS is fun!

@saltnburnem

#DenverDevDay | #DeveloperCommunity

What is A/B testing?

@saltnburnem

#DenverDevDay | #DeveloperCommunity

What is A/B testing?

A/B testing, otherwise known as split testing, is the process of testing two different versions of a web page or product feature against the original, existing version.

- Talia Nassi

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Username

Password

Login

provider

Create Account

A

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Username

Password

Login

provider

Create Account

Username

Password

Login

provider

Create

A

B

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Why?

@saltnburnem

#DenverDevDay | #DeveloperCommunity

⬇️ Answers ⬇️

  • Awesome user experience
  • Increase revenue
  • Data correlation for better business decisions
  • Fine grained control of code exposure

@saltnburnem

#DenverDevDay | #DeveloperCommunity

How?

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Well set up an experiment of course!

@saltnburnem

#DenverDevDay | #DeveloperCommunity

That is what we call a moron.

That is not an experiment.

@saltnburnem

#DenverDevDay | #DeveloperCommunity

First

@saltnburnem

#DenverDevDay | #DeveloperCommunity

First

Gather that data!

@saltnburnem

#DenverDevDay | #DeveloperCommunity

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Scientific Method

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Scientific Method

  1. Ask a question
  2. Do research
  3. Construct a hypothesis
  4. Experiment
  5. Draw conclusion

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Scientific Method

  1. Construct a hypothesis
  2. Experiment

@saltnburnem

#DenverDevDay | #DeveloperCommunity

If we ship this new button, our retention will increase by 20%.

Hypothesis

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Experiment time!

@saltnburnem

#DenverDevDay | #DeveloperCommunity

First

@saltnburnem

#DenverDevDay | #DeveloperCommunity

First

❗️ Baseline before experiment! ❗️

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Username

Password

Login

provider

Create Account

Username

Password

Login

provider

Create

A

B

Control

Treatment

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Feature Flags

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Segment Users

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Username

Password

Login

provider

Create Account

Username

Password

Login

provider

Create

A

B

Control

Treatment

50%

50%

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Demo

@saltnburnem

#DenverDevDay | #DeveloperCommunity

// get treatment
  let treatment = client.getTreatment('css_demo');

  // get features to flip based upon CSS classes
  const featureA = document.querySelectorAll('.a');
  const featureB = document.querySelectorAll('.b');

  if (treatment === 'on') {

      featureB.forEach(element => {
          element.classList.add('hide')
      })
  } else if (treatment === 'off') {
      featureA.forEach(element => {
          element.classList.add('hide')
      })
  } else {
      console.error('Error connecting to Split')
      // default rule here
      featureA.forEach(element => {
          element.classList.add('hide')
      })
  }

});  

@saltnburnem

#DenverDevDay | #DeveloperCommunity

GET TO THE CHOPPA!!!

Resources

https://bit.ly/css-feature-flags

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Chris DeMars

@saltnburnem

@saltnburnem

#DenverDevDay | #DeveloperCommunity

Building Flexible UI's with Feature Flags

By Chris DeMars

Building Flexible UI's with Feature Flags

  • 217