So, we have some conversion rate over time and we roll out a new feature here and then we track its performance over time. We see this graph, right? So, do we think this is successful? Did it move the metric? Well, the metric did go up and to the right. So, maybe, but the actual answer is we have no idea because you can't tell unless you run a controlled experiment because you have no counterfactuals, right? So, like if we had not run that test, the graph could have looked like this. And here's an actual example from Airbnb where they rolled out a new feature and then ended up rolling it back. But if you just look at aggregate, it's really hard to tell causally what happened because there's just so much noise in your signal. People are deploying other features all the time. You have changes in traffic and holidays and all sorts of stuff that's affecting it. And A-B testing is really designed to control for those variants.
The other example we hear as to why they don't run experimentation is, well, we don't need to because we did user testing. Well, if you're familiar with user testing, usually, they're testing on five, maybe even 10 if you're lucky, tests. It's just a really small sample size to try to figure out what you want and there's all kinds of other biases that I won't time to go into. And usually, if you're okay running user tests to start with, you're okay running bigger tests with more people afterwards. So, you should be okay with that.
Let's take a look at the better way to build products. Get no points for guessing that we believe that integrating A-B testing into your process is how you do that. Each product should define what success looks like before you start building it. The process we like to do is, basically, before you start building anything, you sit down and you decide, what's the hypothesis? Why are we building this thing? What do we expect it to do? And then, what actions or behaviors would demonstrate that the hypothesis is correct? And then, what metrics would we need to track for that? It could be a signup rate or registration or purchase event. And then, the final step here is, what is the smallest thing we can build to test this hypothesis to see if it's correct? Because you want to get to signal as fast as possible so you don't waste time building things that don't work. We call this HAM. There's Jonham. And then, if you have the traffic to run that experiment, then you should do that. And so, what the adjusted process could look like is, basically, in your planning of your projects, you kind of come up with the hypothesis, the success criteria, and then scope it down as small as possible. And then, do your regular product process. But then, instead of just shipping it to production to 100% everybody, you ship it as an A-B test. And then, you decide, based on the results of that test, once you get to a significant power, if you should roll it out or roll it back. And then, do a review, like, present the experiments to your team and kind of iterate from there. And the good news is that this is super easy, particularly if you're using feature flags, right? So, as developers, when we ship something to production, like, the main goal, at least initially, is making sure we didn't break anything, right? That's the low bar for what we just shipped out. And feature flags is really helpful with that because you can actually wrap your change in just a conditional bit of logic. It's like, if it's on, show this code.
Comments