Case Study: Feature Flags IRL ![rw-book-cover](https://img.youtube.com/vi/RAUscXUlZmI/maxresdefault.jpg) ๐Ÿ”— **Source:** [Case Study: Feature Flags IRL](https://www.youtube.com/watch?v=RAUscXUlZmI) > [!note]+ Document Notes > tags: #feature-flags #progressive-delivery #experimentation #deployment-safety #continuous-integration > author: Lead Dev > source: YouTube > reference: https://www.youtube.com/watch?v=RAUscXUlZmI > date created: 2024-12-19 15:30 > > # ๐Ÿท๏ธ Title: Case Study: Feature Flags IRL > <!-- deep-read:sections start --> ## ๐Ÿงฐ Action Inbox - [H1] Implement safety feature flags for immediate rollback capability โ€” avoid two-week sprint rollback nightmares #deployment-safety - [H2] Create progressive rollout strategy starting with internal team targeting โ€” test in production safely on ourselves first #testing-strategy - [H3] Set up automated feature flag debt monitoring with API alerts โ€” prevent zombie flags accumulating #technical-debt ## ๐Ÿงญ Table of Contents - [[#๐Ÿ“ Summary]] - [[#๐Ÿ“– Main Content]] - [[#๐Ÿ—’๏ธ Notes]] - [[#๐Ÿ“š References]] - [[#๐Ÿ—ฃ๏ธ Paraphrase]] - [[#๐Ÿ“ฐ Newsletter]] - [[#โœ… Action Items]] - [[#๐Ÿงช Hypotheses]] - [[#๐Ÿ“Š Methodology]] - [[#โ“ Questions]] - [[#๐Ÿ”ฎ Future Research]] - [[#๐Ÿ’ก Implications]] - [[#๐Ÿง  Learning Styles Assessment]] - [[#๐Ÿ“Š Accessibility Assessment]] - [[#๐ŸŒ DEIB Assessment]] - [[#โœ… Logical Validity]] - [[#๐Ÿ›ก๏ธ DARVO Analysis]] - [[#๐ŸŽฏ Conclusion]] ### ๐Ÿ”— References - [Speedway Motors Case Study](https://harness.io/customers/speedway-motors) - [Lead Dev Slack Community](https://leaddev.com/slack) ## ๐Ÿ“ Summary - Speedway Motors transformed from risky fortnightly releases to safe multiple daily deployments using feature flags - The transition addressed blast radius reduction and progressive delivery without hiring new staff - Feature flags serve dual purposes: safety rollbacks for developers and business experimentation for stakeholders - Implementation includes both ephemeral experiment flags and evergreen operational toggles (warehouse weather shutdowns) - Success requires managing feature flag debt through automated monitoring and cleanup processes ## ๐Ÿ“– Main Content Speedway Motors, a tech-enabled e-commerce retailer processing thousands of daily transactions, faced the classic deployment dilemma: fortnightly releases created massive blast radius risk. Their solution through feature flagging demonstrates how progressive delivery transforms both engineering safety and business experimentation capabilities. The transformation addressed multiple pain points. Previously, deployments required 4 AM all-hands ceremonies with complete rollbacks if any feature failed. Teams couldn't isolate which changes drove positive business metrics or quickly address failures. Feature flags enabled granular control, allowing immediate toggles for individual features while maintaining overall system stability. Implementation success stemmed from addressing different stakeholder motivations. Engineers valued safety flags that wrapped new features in toggles, enabling immediate rollbacks without full deployments. Business stakeholders appreciated experimentation capabilities, testing features on small user segments before full rollouts. Both groups benefited from production testing on internal users first. ## ๐Ÿ—’๏ธ Notes #### โฑ๏ธ [00:00](https://youtu.be/RAUscXUlZmI?t=0) โ€” [H1] Speedway's deployment pain points - Key idea: Fortnightly releases created risky all-hands deployment ceremonies - Evidence: "4 o'clock in the morning, everybody on deck, not sure what's going to happen" #### โฑ๏ธ [04:32](https://youtu.be/RAUscXUlZmI?t=272) โ€” [H2] Feature flag definition and evolution - Key idea: Feature flags started as simple toggles but evolved into comprehensive experimentation platform - Evidence: "It's a toggle. You're turning a feature on or off... it's evolved way beyond that" #### โฑ๏ธ [07:15](https://youtu.be/RAUscXUlZmI?t=435) โ€” [H1] Product page redesign success case - Key idea: Major page redesign used progressive rollout with subsequent micro-experiments - Evidence: "We were able to do an experiment on the button color... Orange and green have been measured to perform the most" #### โฑ๏ธ [11:20](https://youtu.be/RAUscXUlZmI?t=680) โ€” [H2] No additional hiring required - Key idea: Existing team adopted feature flagging without technical background requirements - Evidence: "We did not have to hire anybody. Our team picked it up. It was very intuitive" #### โฑ๏ธ [13:45](https://youtu.be/RAUscXUlZmI?t=825) โ€” [H1] Safety vs experimentation motivations - Key idea: Different stakeholder groups found different value propositions in feature flags - Evidence: "Business-minded people really like the experiments... engineers really like the safety" #### โฑ๏ธ [16:30](https://youtu.be/RAUscXUlZmI?t=990) โ€” [H2] Production testing on internal users - Key idea: Teams can deploy to production and test on themselves before customer exposure - Evidence: "We do test in production. We just don't test it on everybody" #### โฑ๏ธ [19:10](https://youtu.be/RAUscXUlZmI?t=1150) โ€” [H1] International shipping failure example - Key idea: Feature flag enabled quick rollback when customs charges revealed UPS integration issue - Evidence: "Turned that feature flag back off... gave us that time to be like, okay, we're stable" #### โฑ๏ธ [22:40](https://youtu.be/RAUscXUlZmI?t=1360) โ€” [H1] Weather-based warehouse shutdown - Key idea: Evergreen feature flag controls warehouse operations during inclement weather - Evidence: "We have a feature flag that controls our warehouse... when we have poor weather and we can't ship out" #### โฑ๏ธ [25:15](https://youtu.be/RAUscXUlZmI?t=1515) โ€” [H2] Complex recommendation system configuration - Key idea: JSON configuration in feature flags enables complex A/B/C/D testing without deployments - Evidence: "We can just go in there and change the title without ever having to do a deployment" #### โฑ๏ธ [28:50](https://youtu.be/RAUscXUlZmI?t=1730) โ€” [H1] Feature flag debt management - Key idea: Automated API monitoring alerts teams to clean up long-running non-evergreen flags - Evidence: "Query harness API... if it's been on for over a month. Are you sure you want to keep it?" #### โฑ๏ธ [32:20](https://youtu.be/RAUscXUlZmI?t=1940) โ€” [H2] Metrics and measurement approach - Key idea: Immediate data collection compares enabled segments to control groups with focus on feature-specific metrics - Evidence: "The closer to the metal that you can get the better... search product engagement... not overall revenue increase" #### โฑ๏ธ [36:45](https://youtu.be/RAUscXUlZmI?t=2205) โ€” [H2] Managing flag dependencies and conflicts - Key idea: Communication and truth tables help avoid conflicts when multiple flags affect same areas - Evidence: "Make a truth table off off on on off on on and figure out which one wins" #### โฑ๏ธ [41:30](https://youtu.be/RAUscXUlZmI?t=2490) โ€” [H1] AI model configuration use case - Key idea: Feature flags enable rapid AI model switching without deployments - Evidence: "Made a feature flag... that just has what model I want to use... so I don't have to do a deployment every time" ## ๐Ÿ“š References - [Speedway Motors Customer Story](https://harness.io/customers/speedway-motors) - [Harness Feature Management](https://harness.io/products/feature-flags) - [Progressive Delivery Patterns](https://progressivedelivery.io/) - [Lead Dev Community](https://leaddev.com/) ## ๐Ÿ—ฃ๏ธ Paraphrase - Speedway Motors eliminated risky fortnightly deployment ceremonies by implementing feature flags that allow safe, frequent releases with immediate rollback capabilities and progressive user targeting - The transformation required no additional hiring as existing teams quickly adopted intuitive tooling that serves both engineering safety needs and business experimentation requirements - Success depends on managing feature flag lifecycle through automated debt monitoring, clear evergreen vs ephemeral distinction, and proper metrics focused on feature-specific rather than broad business outcomes ## ๐Ÿ“ฐ Newsletter **Feature Flags Transform E-commerce Deployment Safety** Speedway Motors' journey from nerve-wracking fortnightly releases to confident daily deployments offers a compelling blueprint for WordPress teams managing release complexity. Their key insight: feature flags serve dual masters effectively. Developers gain safety through instant rollback capabilities, while business stakeholders unlock experimentation potential. The weather-triggered warehouse shutdown example perfectly illustrates how feature flags become operational infrastructure, not just deployment tools. **WordPress Applications:** - Plugin activation/deactivation for A/B testing new features - Theme switching capabilities for progressive design rollouts - Performance optimization toggles for high-traffic periods - Third-party service fallbacks during API outages The "test in production on ourselves first" approach resonates strongly with WordPress staging workflow improvements. Combined with automated flag cleanup monitoring, this creates sustainable development velocity. **Resources:** [WordPress Feature Flags](https://wordpress.org/plugins/search/feature-flags/), [WP-CLI Deployment](https://wp-cli.org/), [Performance Monitoring](https://wordpress.org/plugins/query-monitor/) ## โœ… Action Items #### DevRel - Developer advocacy: Create feature flag best practices content for conference talks and workshops with deployment safety focus - Education: Develop progressive delivery curriculum covering safety flags, experimentation flags, and operational toggles - Developer experience: Document feature flag integration patterns for common development workflows and CI/CD pipelines - Developer marketing: Promote feature flag adoption success stories highlighting reduced deployment stress and faster feedback loops - Community management: Facilitate discussions around feature flag debt management and cleanup automation strategies #### OSPO - Policy & Governance: Establish feature flag lifecycle policies distinguishing ephemeral experiments from evergreen operational controls - License Compliance: Review feature flag tooling licenses and ensure compliance across experimentation platforms - Security Management: Assess feature flag security implications including access controls and configuration management - Software Inventory: Include feature flag configurations in SBOM documentation and dependency tracking - Developer Support: Provide training on feature flag patterns, safety implementations, and measurement strategies - Community Engagement: Share feature flag adoption patterns with upstream projects and contribute to tooling improvements - Strategic Alignment: Define KPIs for deployment safety, experimentation velocity, and technical debt reduction through feature flags #### Community - Maintainers: Support feature flag integration in project roadmaps with safety-first progressive delivery approaches - Contributors: Create first-issue programs around feature flag implementation and documentation improvements - Sponsors: Fund feature flag tooling development and maintenance for open source experimentation platforms - Ecosystem: Coordinate feature flag standards and interoperability across related projects and vendors #### WordPress - Core: Integrate progressive deployment capabilities for WordPress.org plugin and theme directories with feature flag support - Core Performance: Use feature flags for performance optimization rollouts and A/B testing performance improvements - Core AI: Implement feature flags for AI feature experimentation with model switching and prompt configuration capabilities - Mobile: Enable feature flag support in WordPress mobile apps for progressive feature rollouts and user testing - Playground: Integrate feature flag demonstrations and experimentation environments for learning progressive delivery - Community: Develop feature flag best practices documentation and case studies for WordPress-specific deployment patterns - Training: Create lesson plans covering feature flag implementation, safety patterns, and business experimentation approaches - Design: Use feature flags for design system rollouts and user interface experimentation with measurement frameworks - Documentation: Document feature flag patterns for WordPress plugin and theme development workflows - Hosting: Coordinate feature flag support across WordPress hosting providers with standardized implementation approaches #### The WPCC - Programs: Fund fellowships focused on progressive delivery tooling and feature flag implementation for WordPress ecosystem - Projects: Support governance frameworks for feature flag lifecycle management and automated debt cleanup systems - Funding: Provide matched grants for open source feature flag tooling development and WordPress integration projects #### FAIR - Technical independence: Ensure feature flag configurations maintain transparency and avoid vendor lock-in through open standards - Policies: Require funding transparency for feature flag tooling development and experimentation platform choices - Governance artifacts: Create charters covering feature flag decision-making processes and stakeholder involvement frameworks ## ๐Ÿงช Hypotheses - Organizations implementing safety-first feature flags before experimentation flags achieve higher adoption rates and lower deployment anxiety compared to experiment-first approaches - Feature flag debt accumulation follows predictable patterns based on team size and release frequency, enabling proactive cleanup automation strategies - Progressive delivery through feature flags reduces mean time to recovery (MTTR) by 80% compared to full deployment rollbacks - Internal-first targeting strategies increase feature quality and reduce customer-facing incidents by enabling production validation before user exposure ### ๐Ÿ“Š Methodology - Survey deployment teams before and after feature flag adoption measuring deployment confidence, rollback frequency, and incident response time - Analyze feature flag lifecycle data across multiple organizations to identify debt accumulation patterns and optimal cleanup triggers - Conduct controlled experiments comparing safety flags vs experiment flags as initial adoption entry points measuring long-term usage patterns ### โ“ Questions - How do feature flag adoption patterns differ between monolithic and microservices architectures in terms of safety vs experimentation motivations? - What organizational factors predict successful feature flag debt management vs accumulation of zombie flags over time? - How does feature flag granularity (feature-level vs component-level) impact debugging complexity and incident response effectiveness? ### ๐Ÿ”ฎ Future Research - AI-powered feature flag configuration optimization based on user behavior patterns and business metric correlations - Automated feature flag cleanup through static code analysis and deployment pipeline integration - Cross-platform feature flag synchronization for multi-environment progressive delivery orchestration ### ๐Ÿ’ก Implications - Practice: Feature flags fundamentally change deployment psychology from risk aversion to experimentation embrace, requiring cultural adaptation alongside technical implementation - Policy: Organizations need clear governance frameworks distinguishing temporary safety flags from permanent operational controls to prevent configuration sprawl - Security: Feature flag configurations become critical infrastructure requiring access controls, audit trails, and configuration management disciplines - Education: Development teams require training on both technical implementation and business measurement aspects of feature flags for successful adoption - Funding: Feature flag tooling represents infrastructure investment with ROI through reduced incident costs and increased deployment velocity ### ๐Ÿง  Learning Styles Assessment Reading level estimate: 12th grade #### ๐Ÿ‘€ Visual learners - Present: JSON configuration examples, deployment flow diagrams, metric dashboard screenshots - Improve: Architecture diagrams showing feature flag integration points, visual timelines of progressive rollouts #### ๐Ÿ”Š Aural learners - Present: 45-minute video discussion with multiple expert perspectives and real-world examples - Improve: Audio-only version for podcast consumption, speaker notes for presentation adaptation #### ๐Ÿ—ฃ๏ธ Verbal learners - Present: Clear definitions of progressive delivery, feature flags, and technical debt with automotive analogies - Improve: Story-driven case study format with narrative progression from problem to solution #### ๐Ÿงฉ Kinesthetic learners - Present: Hands-on demo environment mentioned in resources, step-by-step implementation guidance - Improve: Interactive workshop format, guided implementation checklists, sandbox environment #### ๐Ÿง  Logical learners - Present: Clear problem-solution structure, metrics-driven decision making, technical implementation details - Improve: Decision trees for flag types, causal diagrams linking flags to business outcomes #### ๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ Social learners - Present: Panel discussion format, community Q&A, Slack channel integration for ongoing discussion - Improve: Cohort-based learning programs, peer review of flag implementations #### ๐Ÿง˜โ€โ™€๏ธ Solitary learners - Present: Case study format enabling individual analysis, self-paced video consumption - Improve: Reflection worksheets, self-assessment rubrics for readiness evaluation #### ๐ŸŒฟ Naturalistic learners - Present: Weather-based warehouse shutdown example connecting technology to environmental factors - Improve: Ecosystem thinking about flag lifecycle, environmental impact considerations of experimentation ### ๐Ÿ“Š Accessibility Assessment #### Screen reader semantics - Present: Clear heading structure, speaker identification, topic transitions - Improve: Timestamp descriptions, speaker role context for audio navigation #### Keyboard navigation - Present: Video player keyboard controls, transcript availability - Improve: Chapter navigation, searchable transcript with timestamp links #### Contrast and readability - Present: Video captions with adequate contrast - Improve: Transcript formatting with proper contrast ratios, large text options #### Text resizing and reflow - Present: Web-based transcript supports zoom functionality - Improve: Responsive transcript layout, mobile-optimized viewing #### Media and captions - Present: Accurate captions throughout 45-minute discussion - Improve: Audio descriptions for visual elements, downloadable caption files #### Forms and interactions - Present: Standard video controls with appropriate labels - Improve: Custom speed controls, chapter selection interface #### --- ## Full Transcript [00:12] Hello everyone and a huge thank you for<br>[00:16] joining us today for today's panel. This<br>[00:18] is a lead dev online engineering and<br>[00:20] action discussion created in partnership<br>[00:22] with harness. Engineering action is<br>[00:25] still a panel but it's kind of a case<br>[00:28] study is probably the best definition of<br>[00:30] it of how things are done in the wild.<br>[00:34] So this discussion will last roughly 45<br>[00:36] minutes after which both myself and our<br>[00:40] esteemed panelists will head over to the<br>[00:41] lead dev slack to answer some of your<br>[00:43] questions in the panel Q&A and that<br>[00:46] channel is called panel Q&A. And for<br>[00:49] those that are joining us live, you have<br>[00:52] in the resources and I'll drop this link<br>[00:53] in the chat. So you have an invite to<br>[00:55] the lead dev slack. It's a really great<br>[00:58] community of engineering leaders<br>[00:59] supporting and learning from each other.<br>[01:02] So if you give us questions live, we may<br>[01:05] answer them live. we may run out of time<br>[01:07] and continue in the Q&A feature uh the<br>[01:12] in<br>[01:13] Slack or you can just use the Q&A<br>[01:16] feature now in Zoom and we will get to<br>[01:19] your questions either asynchronously or<br>[01:22] right now. So I do welcome everyone<br>[01:24] that's joining us live. That's a benefit<br>[01:25] to joining live but you are deeply<br>[01:27] welcome if you're joining us later. So<br>[01:30] yes, Speedway Motors is a tech enabled<br>[01:34] e-commerce and retail store processing<br>[01:37] thousands of transactions a day. So that<br>[01:40] means that every step in their endto-end<br>[01:43] process from showing up at an ad for<br>[01:45] search results, someone entering a store<br>[01:48] in person or a partner shop all the way<br>[01:52] down to a sale, shopping carts,<br>[01:55] shipping, everything really matters. But<br>[01:57] they were dealing with fortnightly<br>[01:59] releases and you kind of live on edge as<br>[02:03] a developer like is every change a risk<br>[02:06] and how do we reduce that risk? So they<br>[02:09] needed to do something to reduce that<br>[02:11] blast radius, make it safe to<br>[02:13] experiment, what we call progressive<br>[02:15] delivery, which is an umbrella term for<br>[02:18] reducing that blast radius and releasing<br>[02:23] as it says progressively to maybe a few<br>[02:25] of their<br>[02:28] customers or maybe choosing c chosen<br>[02:31] customers, specific ones or potential<br>[02:33] customers, etc. And now with feature<br>[02:37] management and feature flagging, which<br>[02:39] is a specific niche we're talking about<br>[02:41] within the progressive delivery life<br>[02:43] cycle, speedway engineers and business<br>[02:46] stakeholders can release a few times a<br>[02:48] day. And if they want only the first 1%<br>[02:51] of their traffic. So today we're going<br>[02:53] to get both sides of that business tech<br>[02:56] coin with delivery manager Kelly and<br>[02:58] technical engineer Derek. And as a bonus<br>[03:01] questioner and feature flagging fan,<br>[03:03] we're also joined by Harness's Aaron.<br>[03:07] We're going to ground this conversation<br>[03:09] in real features tested, how these<br>[03:12] experiments are set up and managed,<br>[03:14] ephemeral and evergreen future flags,<br>[03:16] and more. So, let's get started with<br>[03:18] introductions. You've probably seen me<br>[03:20] before here. I'm Jennifer Higgins, and<br>[03:22] I'm a freelance technology journalist,<br>[03:25] including with lead dev. And today I'll<br>[03:27] be joined, as we said, by Kelly, Derek,<br>[03:30] and Aaron who are ready to share their<br>[03:32] experience. Can you please introduce<br>[03:34] yourselves? So, Kelly, do you want to<br>[03:36] kick off?<br>[03:37] >> Yeah, absolutely. Hi. Uh, I'm Kelly<br>[03:40] Bear. I'm the senior agile delivery<br>[03:42] manager here at Speedway Motors. I have<br>[03:44] been with Speedway for just over 11<br>[03:46] years now, so have seen a lot of<br>[03:48] evolution on the tech side of things.<br>[03:51] Um, super excited to talk through things<br>[03:53] today because of that. um just to pass<br>[03:56] along how much we have learned along the<br>[03:58] way and I'm excited to share that<br>[04:00] knowledge.<br>[04:02] >> Great, Derek.<br>[04:03] >> Thank you, Kelly. Uh my name is Derek<br>[04:06] Stapleton. Like Kelly, I also have a<br>[04:09] decade of experience at Speedway Motors.<br>[04:12] Uh my team is primarily responsible for<br>[04:14] customer acquisition and product<br>[04:16] discovery as kind of our niche, but I<br>[04:20] was on the ground floor with the<br>[04:21] adoption of our feature flagging and the<br>[04:24] culture shift that went along with it.<br>[04:26] So I'm very excited to evangelize<br>[04:32] this stuff because it's changed my life.<br>[04:34] I love it. We can get into that a little<br>[04:36] bit more later, but uh Erin, I think you<br>[04:38] might be next.<br>[04:40] >> Yeah, I'll go next. So, my name is Aaron<br>[04:41] Nukem. I'm a senior manager. I work with<br>[04:44] our uh product called FME. It's not uh<br>[04:47] something that a lot of people are aware<br>[04:49] of, but it stands for feature management<br>[04:51] and experimentation. Uh we acquired<br>[04:54] Split.io. So, if you are familiar with<br>[04:56] Split or have used it in the past,<br>[04:57] that's now part of harness and it uh<br>[05:00] integrates with all of our other<br>[05:01] products. So, um yeah, a little bit of a<br>[05:04] little bit of a transition there for<br>[05:06] Split, but we're glad to have them. And<br>[05:08] I will say I've been here for about 6<br>[05:09] months and the first thing I heard was,<br>[05:11] "Hey, have you heard what Speedway<br>[05:13] Motors is doing? You need to go take a<br>[05:15] look and see what they're doing because<br>[05:16] it's a great example of how you do<br>[05:18] things right." And so, um, that was you<br>[05:22] all were one of the first, uh, customers<br>[05:24] I actually dug into and learned about as<br>[05:27] kind of a kind of an example for<br>[05:29] everybody else on how to do this stuff.<br>[05:30] So, congratulations on all your success<br>[05:32] so far.<br>[05:34] >> Awesome. Thank you. And then in the<br>[05:36] resources for those joining us, we do<br>[05:38] have a more extensive case study that'll<br>[05:41] give you those numbers if you need or<br>[05:43] something to bring to your own business<br>[05:45] stakeholders to talk about it in that<br>[05:48] way. We're going to get into both the<br>[05:50] business and the tech. But if you need<br>[05:52] just a one cheater, I do recommend<br>[05:54] sharing that. So it's interesting that<br>[05:57] both you Derek and Kelly have worked at<br>[05:59] Speedway for over a decade. So I want to<br>[06:04] talk culture first of where you began<br>[06:06] and how you were able to as you've we've<br>[06:10] already implied at the beginning like<br>[06:12] there were slower releases. It's not<br>[06:14] that there was a lack of psychological<br>[06:16] safety. It sounds like it was more a<br>[06:18] lack of security in the technology of<br>[06:21] making big changes. So, where was your<br>[06:25] culture at and how did you convince<br>[06:27] people to get on board with feature<br>[06:30] flagging and experimentation,<br>[06:33] >> Kelly? I think that's a great one for<br>[06:35] you.<br>[06:37] >> Um, so yeah, I mean, we thinking back a<br>[06:41] couple years now, we do two week long<br>[06:43] sprints. Um, and we still do two week<br>[06:46] long sprints, don't get me wrong there.<br>[06:47] Um, but it was one big release at the<br>[06:50] end of each sprint and we would come in<br>[06:52] at four o'clock in the morning,<br>[06:54] everybody on deck, you know, no not sure<br>[06:57] what's going to happen because we're<br>[06:58] deploying everything that we worked on<br>[07:00] in those two weeks at the same time. Um,<br>[07:03] so you can imagine there's no quick<br>[07:05] feedback loops. If one thing is wrong,<br>[07:08] we have to completely roll back<br>[07:09] everything. It was just very very kind<br>[07:12] of scary. Um, and then we'd send one big<br>[07:15] long email to all of our stakeholders<br>[07:16] saying, "Hey, this is a long list, but<br>[07:19] this is everything that just, you know,<br>[07:21] went out to production today." Um, so I<br>[07:24] mean, that's kind of where we started.<br>[07:25] It's it was really scary. Lots of all<br>[07:27] hands. Um,<br>[07:30] >> Derek, how do you feel from the<br>[07:31] engineering side of that?<br>[07:32] >> That's exactly it. It was a ceremony and<br>[07:35] we had to change our sleep schedule and<br>[07:38] it was a pain in the butt to go and<br>[07:41] >> everybody get together and deploy<br>[07:43] everything. And Kelly, you referenced<br>[07:45] the the bad part of the deployments,<br>[07:47] right?<br>[07:47] >> Outages happen. We have to go back two<br>[07:50] weeks in our memory to figure out this<br>[07:52] one feature caused an issue and we, you<br>[07:54] know, had forgotten about it, moved on<br>[07:56] with different features in our workload.<br>[07:58] Um, but the other thing that we missed<br>[08:00] out on was what worked,<br>[08:02] >> you know. Um there's the stuff that<br>[08:05] broke obviously, but what worked and we<br>[08:07] couldn't double down on that. So we did<br>[08:10] a deployment and maybe things shifted<br>[08:12] around and we saw an increase in AOV,<br>[08:15] increase in revenue, whatever. But if<br>[08:18] somebody came up to us and said, well,<br>[08:20] what feature did that? Everybody could<br>[08:22] claim that their feature did it. Nobody<br>[08:24] really had the proof that this is the<br>[08:27] actual thing that caused the the lift<br>[08:29] and we should continue on that thread.<br>[08:32] So you kind of get it on both sides.<br>[08:34] There's carrots and sticks for you don't<br>[08:36] want to do the bad stuff, but you really<br>[08:37] do want to follow the trail of the good.<br>[08:41] >> Okay.<br>[08:41] >> So,<br>[08:42] >> yeah, go please, Kelly.<br>[08:44] >> I was just going to say, yeah, just to<br>[08:45] kind of finish off on that comment, um,<br>[08:48] we follow like the modern agile<br>[08:49] principles very closely and one of those<br>[08:51] is, you know, to deliver value<br>[08:52] continuously. So, we knew we weren't<br>[08:54] doing that. We knew there was a problem.<br>[08:56] Um, how could we move forward with that?<br>[08:58] And I think that that kind of leads into<br>[09:00] the rest of the conversation.<br>[09:03] >> Yeah. I I think maybe Aaron, you might<br>[09:05] be best define to define what feature<br>[09:08] flagging is. And then I'm really curious<br>[09:10] because there is an a lot of options for<br>[09:14] aggressive delivery. But I'm curious why<br>[09:16] that was chosen as the solution for<br>[09:18] this. So Aaron, if you want to give us a<br>[09:20] quick definition of a feature flag.<br>[09:21] >> Yeah, I can give you I can give you a<br>[09:23] real quick one. I mean, most people are<br>[09:24] are aware. I think at this point, most<br>[09:26] dev teams use feature flags in one form<br>[09:28] or another. They may be very rudimentary<br>[09:31] DIY or they may have a vendor like<br>[09:34] harness that are helping them uh manage<br>[09:36] those and scale those. But basically,<br>[09:39] it's a toggle. You're turning a feature<br>[09:40] on or off. And there's a lot of reasons<br>[09:42] you want to do that, right? The classic<br>[09:44] one is, hey, I want to release this. In<br>[09:46] our case, since we're a vendor, we want<br>[09:48] to be able to turn on, let's say, a beta<br>[09:50] feature for someone. So, we build out<br>[09:51] the feature, put it behind a feature<br>[09:53] flag, and then we can turn that on just<br>[09:55] for a subset of users that are doing the<br>[09:58] the beta test, right? That's how I first<br>[10:01] came in contact with this years and<br>[10:02] years ago, but it's evolved way beyond<br>[10:05] that, right? And and when you add<br>[10:07] experimentation on on that as well, now<br>[10:10] you're able to actually uh do exactly<br>[10:12] what Dererick and Kelly just said,<br>[10:14] right? which is you're not just it does<br>[10:16] solve the problem of these massive<br>[10:18] deployments that you want to break up<br>[10:20] into their uh individual components or<br>[10:22] individual features that you can then<br>[10:24] turn on and off but it's also a way to<br>[10:26] test those and see if they're working.<br>[10:28] So, you turn on a flag, but you only<br>[10:30] turn it on for maybe 10% I think as you<br>[10:33] alluded to earlier on, right, of your<br>[10:36] user base. And maybe that's a maybe<br>[10:38] that's a a progressive roll out or or<br>[10:40] maybe you turn it on just for your uh<br>[10:42] power users, for example, because<br>[10:44] they're going to give you more feedback<br>[10:45] and you're going to know faster whether<br>[10:47] that thing is working. So, there's all<br>[10:49] kinds of various segments you could turn<br>[10:50] on those flags for. And then, of course,<br>[10:52] you experiment on the other end. You set<br>[10:54] up an experiment and say, "Hey, is this<br>[10:56] impacting my checkout rate, right? Or or<br>[10:59] or my cart size or did I order an extra<br>[11:03] burger with my uh fast food order<br>[11:06] because I was testing this new way to<br>[11:08] present this data to you and to present<br>[11:09] an offer to you?" Right? There's all<br>[11:11] sorts of ways to use feature flags. And<br>[11:14] the biggest one we're hearing, of<br>[11:15] course, today is just dealing with the<br>[11:17] velocity of code being generated, right?<br>[11:19] There's so much code that's coming down<br>[11:21] the pike. And um you need a way to be<br>[11:24] able to deal with that. And the last<br>[11:26] thing you want to do is have, you know,<br>[11:29] 200 300% more features that you're<br>[11:31] releasing and still be in that old mode<br>[11:33] of releasing in one big chunk, you know,<br>[11:35] every other week or whatever. Like<br>[11:37] that's just it's just setting yourself<br>[11:39] up for some sort of a risk or some sort<br>[11:41] of sort of a vulnerability to creep in.<br>[11:44] >> Okay. So let's concrete that a bit<br>[11:46] because a feature release could be<br>[11:49] anything from we're going to change the<br>[11:52] entire language of the app or a foreign<br>[11:56] or programming or it could be something<br>[11:59] so small as like a different colored<br>[12:01] button. So can we get into some of the<br>[12:03] experimentation practically y'all did at<br>[12:05] Speedway or maybe your first experiment<br>[12:08] even how you figured out we're going to<br>[12:10] try that first. That's nerve-wracking. I<br>[12:13] remember the most successful experiment<br>[12:17] that I've done and that was we redid our<br>[12:21] product page. We had an old product page<br>[12:24] and like Aaron said, we were able to do<br>[12:26] a progressive roll out on that and this<br>[12:29] one's near and dear to my heart because<br>[12:31] I was leading it. I was I was running<br>[12:34] the project and I could see the results<br>[12:36] of the experiment<br>[12:38] positively influence business outcomes.<br>[12:42] And that was a fairly large experiment<br>[12:44] on the whole, but once it went out, we<br>[12:48] were able to do legitimately what you<br>[12:50] just said, Jennifer, we were able to do<br>[12:51] an experiment on the button color. Like<br>[12:54] there's a reason why Amazon's button<br>[12:56] color is orange. Orange and green have<br>[12:58] been measured to perform the most. Uh<br>[13:02] that's not an accident. They did a test<br>[13:04] on it and they did a test on the button<br>[13:06] color and it ended up successful for<br>[13:08] them. So you can be really nitpicky with<br>[13:12] with your experiments if you want to.<br>[13:15] >> So yeah, explain more about this. So you<br>[13:17] did a rebrand of your product page, I<br>[13:19] guess, and instead of So you still did<br>[13:22] like<br>[13:24] because often,<br>[13:26] >> especially developers get very precious<br>[13:28] about their websites.<br>[13:30] Um, let's call it what it is. And a lot<br>[13:32] of them built their own even though<br>[13:34] that's not their unique value<br>[13:35] proposition building website. uh<br>[13:38] respectfully of course say you got<br>[13:40] precious perhaps but a lot of times it's<br>[13:44] this really spoken to someone in content<br>[13:47] arduous process to get that up there and<br>[13:50] to make that change. So how did you did<br>[13:53] you make it in still like a switch from<br>[13:56] one to the other or did you<br>[13:58] progressively change? So it still was<br>[14:00] like a full rebrand launch but then when<br>[14:02] you launched you had all these toggles<br>[14:04] going.<br>[14:06] >> Yeah. So there was some leadup discovery<br>[14:10] work that we did before when we were on<br>[14:13] the old product page. We were able to go<br>[14:16] add feature flags to it and toggle<br>[14:18] certain features on and off to<br>[14:20] understand what the new pages needed<br>[14:23] like what's really important, what's<br>[14:24] really driving customer behavior. Then<br>[14:26] there was this big toggle where we went<br>[14:29] from the old to the new. We changed the<br>[14:32] tech stack underneath of it. But then<br>[14:34] once we deployed fully that new and<br>[14:38] measured it to have a positive outcome,<br>[14:40] there was the discovery work again where<br>[14:43] we were doing more smaller<br>[14:44] experimentations. We were working on<br>[14:46] stuff like recommendation sections. We<br>[14:48] were working on stuff like what<br>[14:51] placement of images is the most<br>[14:53] effective to to our customers. So<br>[14:56] there's kind of this small big small<br>[14:58] cadence that we use specifically for<br>[15:00] that project. But you can use any like<br>[15:05] you can put anything big or small behind<br>[15:07] a feature flag. Um they're very very<br>[15:09] flexible.<br>[15:11] >> Wow. Okay.<br>[15:13] >> And I would say one of the one of the<br>[15:14] lesser known I would I would just say it<br>[15:16] really does when you start looking at<br>[15:18] how to use feature flags, it really does<br>[15:19] open your mind a little bit. Um you know<br>[15:22] we're talking about basically you know<br>[15:24] testing features but you could also use<br>[15:25] it as part of a migration. I don't think<br>[15:27] that happened in this case, but you<br>[15:29] could certainly use feature flags as a<br>[15:31] way to move from on-prem to cloud or<br>[15:34] from one database to another database.<br>[15:36] uh one version of your application<br>[15:38] that's built on a particular uh language<br>[15:41] and structure, you know,<br>[15:44] um maybe you're using uh moving into<br>[15:47] containers and Kubernetes from more of a<br>[15:49] static inst there's just like all kinds<br>[15:51] of things once you start getting into<br>[15:53] this world of oh what can I control<br>[15:56] easily with this thing um that your mind<br>[15:59] starts kind of expanding the<br>[16:01] possibilities<br>[16:03] >> and honestly in the world of AI I and<br>[16:06] the cost of cloud etc. There's also<br>[16:09] people experimenting with moving<br>[16:11] workloads back they may be cloudnative<br>[16:13] workloads but back to onrem and figuring<br>[16:16] out which is more efficient more<br>[16:18] effective for a different workload. I'm<br>[16:22] very curious about this process. So did<br>[16:25] you have to hire people that were<br>[16:29] feature flag<br>[16:31] speakers or proficient? Did you expand<br>[16:34] your team because you had you were<br>[16:37] running these experiments? How did you<br>[16:39] perform training, onboarding<br>[16:41] into the feature management?<br>[16:43] >> We did not have to hire anybody. Our<br>[16:45] team picked it up. It was very<br>[16:47] intuitive.<br>[16:50] Yeah, coming from someone who does not<br>[16:52] have a technology background actually um<br>[16:55] I it's was very quick for me to pick up<br>[16:59] um figure out you know exactly I care<br>[17:01] more about the metrics of something<br>[17:02] exactly where to go how to look at those<br>[17:04] things um so even from like a<br>[17:06] non-technological<br>[17:08] aspect I would say it was just super<br>[17:09] quick to pick up<br>[17:11] >> and Jennifer just to say one other thing<br>[17:13] this kind of doubles down on something<br>[17:15] that you said too Aaron the feature<br>[17:17] flags themselves don't necessarily need<br>[17:19] to be experiments every time. There's<br>[17:23] such a thing as a safety feature flag.<br>[17:25] And I think that for developers, like<br>[17:29] having safe code is is incredibly<br>[17:32] important. So if a developer can see,<br>[17:35] oh, I can wrap this new feature that I'm<br>[17:37] building that I'm not going to have any<br>[17:40] test on. I have no intention on testing<br>[17:42] it, but it ensures the safety of the<br>[17:45] overall experience. and if something's<br>[17:47] broken on a deployment, I can just go<br>[17:49] turn it off immediately. I think that<br>[17:51] was a really good selling point for the<br>[17:53] engineering team, too. And it also<br>[17:55] helped the the adoption of it. I think<br>[17:58] maybe the more business background, the<br>[18:00] business-minded people really like the<br>[18:02] experiments and like the business<br>[18:04] outcome side of it. Like that that's<br>[18:06] makes intuitive sense to that crowd. But<br>[18:08] the safety and honestly reputation that<br>[18:12] comes with engineers is my code works<br>[18:16] and and that helps the adoption of<br>[18:18] feature flags from the from the<br>[18:20] technical side.<br>[18:21] >> That also closes that important feedback<br>[18:24] loop that's so that cognitive load that<br>[18:26] developers are holding and at a two week<br>[18:30] sprint you maybe didn't even remember<br>[18:32] what you did<br>[18:34] >> to then be able to fix it. But if you<br>[18:36] have an immediate feedback loop that<br>[18:37] closes that loop and it's also an<br>[18:39] adrenaline rush to be accepted or maybe<br>[18:42] not and have to fix and scramble it, but<br>[18:44] at least it comes back and you can fix<br>[18:46] it.<br>[18:48] >> Yeah. Certainly a lot better than<br>[18:49] rolling back a huge deployment with<br>[18:52] tens, 20s, however many features you<br>[18:55] deploy, right? Because that's the<br>[18:57] alternative. That's why it's kind of the<br>[18:58] safety blanket, if you will, on a<br>[19:00] feature-byfeature basis. Otherwise, you<br>[19:03] know, who knows? Is that roll back going<br>[19:04] to succeed? You know, all those features<br>[19:06] that you rolled out, whoever was exposed<br>[19:08] to those now doesn't have those anymore.<br>[19:10] Where if you're dealing with feature<br>[19:12] flags, it's you're dealing with it on a<br>[19:13] very, very tight window, very tight<br>[19:17] application where you can just say, "Oh,<br>[19:18] I'm just going to take that one thing<br>[19:20] that's failing and I'm going to turn it<br>[19:21] off. And by the way, I can give that<br>[19:23] functionality to my incident team." So<br>[19:26] they they're enabled to do it. I don't<br>[19:28] know if if at Speedway how you deal with<br>[19:29] that, but I mean it it does kind of<br>[19:31] democratize the ability to to handle<br>[19:34] when things go bad, so to speak.<br>[19:36] >> Yeah. And and one other thing that we<br>[19:38] can do just to double down on that point<br>[19:40] is you mentioned targeting before,<br>[19:42] Aaron. We can target ourselves first. We<br>[19:45] can do a production deployment and<br>[19:47] target, you know, our team, you know,<br>[19:50] and stakeholders directly and we can<br>[19:54] test it out on oursel in the production<br>[19:56] environment. I mean there's a joke about<br>[19:58] do you test in production? We do. We do<br>[20:00] test in production. We just don't test<br>[20:02] it on everybody. We we can specifically<br>[20:04] target ourselves and ensure that it's<br>[20:07] going to be good so no customers are<br>[20:09] ever going to have that poor experience<br>[20:11] if that were to happen.<br>[20:13] >> Do the business stakeholders or other<br>[20:15] stakeholders ever become a bottleneck in<br>[20:17] that situation? because then they're<br>[20:19] like, "Well, use it." And then they're<br>[20:21] like, "Well,<br>[20:23] you could change it a bit."<br>[20:27] >> Yeah, I'm sure that that does happen.<br>[20:30] You know, I don't think you're ever<br>[20:31] going to automate that away. Um,<br>[20:34] >> yeah,<br>[20:35] >> one thing it does allow us to do is if<br>[20:38] if that conversation does come up and a<br>[20:41] business stakeholder is like, "Hey, I'm<br>[20:42] not so sure about this." You can release<br>[20:44] to a segment of your customers. you can<br>[20:47] release to 5 10%. And that's when a test<br>[20:50] helps out a ton because if it's just my<br>[20:54] word against your word, that's that's<br>[20:56] one thing. But if we actually have data<br>[20:58] to back it up, that can kind of drive<br>[21:00] the conversation in a less political,<br>[21:02] more advantageous way.<br>[21:06] >> How does it work on the other side? Have<br>[21:08] you had, and of course nothing giving<br>[21:09] away the secret sauce, but have you had<br>[21:12] features that just didn't work? Like<br>[21:16] customers responded differently,<br>[21:18] stakeholders responded differently, and<br>[21:22] you just were surprised. How do you deal<br>[21:24] with that then?<br>[21:28] I think uh at that point, you know, it<br>[21:30] depends because for example, um we<br>[21:34] recently went to live with a fully<br>[21:36] landed cost shipping option for our<br>[21:38] international customers. Um and what we<br>[21:40] did is we started out about 5% just to<br>[21:43] make sure that you know we could see<br>[21:45] some orders get through full conception<br>[21:48] from uh order place to ship to getting<br>[21:51] through customs, make sure everything,<br>[21:53] you know, follows that path correctly.<br>[21:55] Um, and we actually found at about<br>[21:58] actually we went to 100%. So we got all<br>[22:01] the way to 100% found out that there was<br>[22:03] an issue once the packages were getting<br>[22:05] to customs.<br>[22:06] >> Um, they were being charged again by<br>[22:09] UPS. So what we were able to do is we<br>[22:12] turned that feature flag back off. Um,<br>[22:14] realized, okay, something's going on<br>[22:16] here. It gave us that time to be like,<br>[22:18] okay, we're stable. Obviously, we have<br>[22:20] it turned off so we know that um we're<br>[22:22] not offering fully landed cost anymore.<br>[22:24] Um so the expectation is correct on the<br>[22:27] customer's side of things, but then it<br>[22:29] gave us that moment to be like, okay,<br>[22:30] we're stable now. We can figure out<br>[22:32] what's going on, where the problem is.<br>[22:34] Is it on our end? Is it on UPS's end? Um<br>[22:37] so that was something that we were able<br>[22:39] to, you know, really quickly kind of<br>[22:41] dive into. Um and you know, this isn't<br>[22:45] the only one that we found out, oh no,<br>[22:47] we have to turn it off. you know, those<br>[22:48] things happen. Um, but it just really<br>[22:50] gives you that quick run back to be<br>[22:52] stable back to where you know things are<br>[22:55] okay and then give you that time to dive<br>[22:57] into what's going on.<br>[22:59] >> Yeah. And it's really easy to get<br>[23:00] pessimistic about experiments that<br>[23:02] didn't pan out because you're excited<br>[23:04] about them.<br>[23:05] >> But I think it's a win to learn. It's a<br>[23:08] good thing that you know not to do that.<br>[23:11] Um, learning in either direction,<br>[23:13] positive or negative, is a good thing. I<br>[23:16] would say maybe one of the harder points<br>[23:20] is if you do an experiment and you have<br>[23:23] inconclusive results.<br>[23:26] That's kind of a tough one. You have to<br>[23:27] choose a direction to go. Um but I'd<br>[23:31] rather run an experiment than not run<br>[23:33] one.<br>[23:34] >> Okay. Another use case brought from the<br>[23:37] audience is so thank you. Uh you can<br>[23:41] have feature flags for fallback for<br>[23:43] maintenance states to show a message.<br>[23:46] Also for areas of your code that you<br>[23:48] have a dependency on a third party such<br>[23:50] as figuring out state taxes to apply so<br>[23:53] you handle outages you can't control. I<br>[23:57] think that's great too because I think<br>[23:59] both examples that we just talked about<br>[24:02] are things are not as much as you want<br>[24:05] to experiment things are not always in<br>[24:07] your control. they may be in the world's<br>[24:10] largest shipping company's control that<br>[24:13] you are a very valued partner. So you<br>[24:16] have to figure that out and I think<br>[24:19] that's a really valid point. I'd love to<br>[24:21] get into the practicality now. Derek, do<br>[24:23] you want to tell us about how you<br>[24:25] actually go about what a feature flag<br>[24:27] looks like from the technical end? It<br>[24:29] sounds like Kelly on a more my style<br>[24:33] view. Yes.<br>[24:34] >> That it's business and that's important<br>[24:37] too. We know with platform engineering<br>[24:38] we need that single pane of glass so<br>[24:40] business stakeholders can see but I'm<br>[24:42] sure we have some technical listeners.<br>[24:44] So do you want to go into that how that<br>[24:46] works Derek?<br>[24:47] >> Yeah so how we implemented it was we<br>[24:50] have a a shared SDK library uh in our<br>[24:55] code in our service harness<br>[24:58] specifically.<br>[25:00] Um what that allows us to do is that<br>[25:04] shared code is more of a utility and we<br>[25:07] can call that from anywhere in our<br>[25:09] codebase. So that means you have this<br>[25:11] very thin call, this thin layer um that<br>[25:16] surrounds your feature or your third<br>[25:18] party. I was going to actually double<br>[25:20] down on that. We have a a feature flag<br>[25:22] that controls our warehouse right now<br>[25:24] when we have inclementware weather. If<br>[25:27] we have poor weather and we can't ship<br>[25:28] out, we can turn our warehouse off with<br>[25:30] a feature flag.<br>[25:32] >> Wow.<br>[25:33] >> Um, yeah. So, so you can have this be<br>[25:37] loadbearing in your overall operations.<br>[25:40] Uh, but yeah, it makes it very very<br>[25:43] easy. It's a thin call that you would do<br>[25:46] and then you just surround your code in<br>[25:48] an if statement. If this feature is on,<br>[25:51] do this. Else do the old thing.<br>[25:56] Okay. You had an image you wanted to<br>[25:58] share, right? Do you want to explain<br>[26:00] that? Bring that up. Like a good thing.<br>[26:02] I'm still amazed by that example, by the<br>[26:05] way.<br>[26:05] >> Yeah. Just to double down on that, like<br>[26:08] there's um permanent feature flags that<br>[26:11] we have. So, I kind of have this example<br>[26:13] that I shared with with Jennifer before<br>[26:14] this. Um this is an example of a really<br>[26:17] complicated permanent feature flag that<br>[26:20] we have. Um<br>[26:23] we have a very complicated<br>[26:25] recommendation solution that we have<br>[26:28] measured to be positive like in terms of<br>[26:31] business outcome. This has increased our<br>[26:32] revenue quite a bit. Uh what we've done<br>[26:36] is we've created just a JSON object that<br>[26:38] we've put inside of our feature flag<br>[26:41] configuration<br>[26:43] and it allows us to test very<br>[26:46] complicated<br>[26:47] uh examples against against<br>[26:51] uh just head-to-head. If you are blessed<br>[26:53] to have just copious amounts of traffic,<br>[26:56] you can actually run more than just AB.<br>[26:59] You can do an ABCD test if you want to<br>[27:02] and 25% of traffic goes to each and you<br>[27:05] can learn pretty rapidly. Um so this is<br>[27:08] an example here. It kind of does two<br>[27:11] things. We're able to do the experiment<br>[27:13] on head-to-head. Is it better to put<br>[27:15] mandatory Rex in front of consumable Rex<br>[27:17] or vice versa? That could be a<br>[27:19] hypothesis that we would test out. But<br>[27:22] say there's just a a simple text change<br>[27:24] that we want to make to our title. Uh we<br>[27:27] can just go in there and change the<br>[27:29] title without ever having to do a<br>[27:31] deployment. Uh it's instantly realized<br>[27:33] on the client.<br>[27:36] >> Wow. Fantastic.<br>[27:38] >> Yeah, I think that's an important um as<br>[27:41] people are learning how to do this or<br>[27:42] maybe trying to create their own DIY<br>[27:45] feature flag uh practice. Um, it it is<br>[27:49] kind of amazing because all this runs<br>[27:50] client side, how quickly you can change<br>[27:52] things. You change a feature flag and<br>[27:55] it's I I I can't say it's instantaneous<br>[27:57] from a mathematical perspective because<br>[27:58] that's not true. But when you're<br>[28:00] comparing it to to rolling out a new<br>[28:02] version of your app, let's say on your<br>[28:04] phone, hoping someone downloads it or<br>[28:06] whatever to get that upgrade. being able<br>[28:08] to just flip flip a toggle like<br>[28:10] literally have it appear within moments<br>[28:14] uh for your customer and then be able to<br>[28:16] see results come in almost immediately.<br>[28:20] It really is gamechanging.<br>[28:23] >> Well, thank you. I'm still obsessed with<br>[28:25] that idea of the weather shutting down<br>[28:27] the warehouse. That is the world we're<br>[28:30] entering<br>[28:32] >> for sure.<br>[28:33] >> Yeah. And it's super convenient. Like it<br>[28:35] used to be a panic, right? like we<br>[28:37] would, oh no, we have to go and do a<br>[28:39] deployment to turn off our warehouse and<br>[28:42] you want me to do that right now at 6:00<br>[28:44] in the morning because it's snowing<br>[28:46] outside. Now it's just a feature flag.<br>[28:48] We did that that work once and we have<br>[28:50] the ability to toggle it whenever we<br>[28:52] want to.<br>[28:53] >> And you would call that like an<br>[28:55] evergreen feature flag. We had talked<br>[28:56] about feature flags that you reuse or<br>[28:59] keep running, but feature flag debt is<br>[29:02] like everything else. Everybody's got<br>[29:03] their zombie servers running. Everyone's<br>[29:06] got their zombie microservices running.<br>[29:07] Like how do you combat feature flag<br>[29:11] debt? How do you decide what is a<br>[29:13] permanent feature flag versus an<br>[29:14] experiment? When do you turn these off?<br>[29:16] >> Yeah, that's a great question. I would<br>[29:18] say our evergreen feature flags are ones<br>[29:21] that wrap third parties. Uh like the<br>[29:24] example given in chat, the ones that you<br>[29:26] know, our warehouse, that's an evergreen<br>[29:29] one. Our recommendations are going to be<br>[29:30] evergreen. Um, we've we've also got a<br>[29:34] evergreen feature flag that targets<br>[29:36] internal users. So, if you are a<br>[29:40] Speedway Motors employee, you can see<br>[29:42] certain uh data points on our site that<br>[29:46] other people won't. Mostly it's like<br>[29:48] search investigation.<br>[29:50] Um, so there's a couple dedicated ones<br>[29:53] that we have. The debt does pile up. Um,<br>[29:57] the best way to do like I would say the<br>[29:59] non- evergreen ones, the ones where you<br>[30:01] had an experiment and then you uh<br>[30:04] concluded the experiment, then you moved<br>[30:06] on with your life or you just had that<br>[30:08] safety feature flag where your code was<br>[30:10] behind a feature flag, you were able to<br>[30:13] deploy it, test it on yourself, not an<br>[30:16] experiment, and then just turn it on.<br>[30:18] Those feature flags do hang around. They<br>[30:21] do hang around. One thing that we have<br>[30:23] done to combat that is uh harness has an<br>[30:27] API and we have a task that will go and<br>[30:31] query harnesses API to see all of the<br>[30:33] feature flags that are outstanding and<br>[30:36] if it's not a dedicated evergreen<br>[30:39] feature flag if we haven't set that up<br>[30:41] as a as a tag for for permanent uh it<br>[30:45] will alert us. It'll say this thing's<br>[30:47] been on for over a month. Are you sure<br>[30:49] you want to keep it? And what is the<br>[30:51] risk of leaving feature flags on?<br>[30:55] >> Very low. Very low. I guess you could<br>[30:58] accidentally go back and turn it into<br>[31:01] the incorrect state and then you built<br>[31:03] code around it where now your feature<br>[31:06] flag being in the off state would not<br>[31:09] act nicely with the new code that you've<br>[31:11] written. Um<br>[31:14] >> that's just good code hygiene. Yeah.<br>[31:16] >> Yeah.<br>[31:18] the the feedback loop on that would be<br>[31:20] nice if we can go in and remove that<br>[31:22] from code more<br>[31:25] uh eagerly. Maybe that's an application<br>[31:27] for AI.<br>[31:29] >> Okay.<br>[31:29] >> Yeah. I I can't go into the details on<br>[31:31] that, Derek, on this one, but um<br>[31:34] >> uh stay all I can say is stay tuned for<br>[31:37] for just a little bit longer and uh<br>[31:39] we'll we'll we'll have a follow-up and<br>[31:41] see how that's going, I guess.<br>[31:42] >> But there are other mechanisms as well.<br>[31:45] I mean uh what Dererick is saying is is<br>[31:47] really popular actually because we do<br>[31:49] have a concept of pipelines and policies<br>[31:51] in place in the product. So you can set<br>[31:54] a step in your in your uh pipeline for<br>[31:57] example that will say uh go you know<br>[32:01] after this has hit 100% after this flag<br>[32:03] has been rolled out to 100% you have a<br>[32:05] step that's automated. it's part of your<br>[32:07] process that says go clean up this code,<br>[32:09] here's where it lives, and then make<br>[32:11] sure that gets deployed and updated as<br>[32:13] part of your next um deployment. So you<br>[32:16] absolutely can can at least automate it,<br>[32:18] make sure you have policies in place to<br>[32:20] enforce it so that people do go in and<br>[32:24] um clean that stuff up because you can<br>[32:25] imagine, you know, we're talking about<br>[32:27] individual use cases here, but those add<br>[32:29] up, especially for companies that have<br>[32:33] thousands and thousands of developers.<br>[32:35] Um that the amount of code that's that's<br>[32:37] kind of left hanging out there, it's<br>[32:39] important to go clean it up at the end<br>[32:40] of the day.<br>[32:41] >> And it's just going to be more code with<br>[32:43] AI. We're just going to have more of<br>[32:45] everything. It's going to amplify all<br>[32:46] the bad habits. So, let's get good<br>[32:49] hygiene and habits in place and avoid<br>[32:51] more debt.<br>[32:53] >> 100%.<br>[32:54] >> Love this audience question, so I pick<br>[32:56] it eagerly. How do you measure the<br>[32:58] impact of the feature that's toggled on?<br>[33:01] What metrics do you use? Do you pair<br>[33:02] with AB testing, etc.? Kelly, I think<br>[33:06] business probably super fun<br>[33:08] functionality, I guess, supersedes<br>[33:09] business, but business probably<br>[33:11] supersedes<br>[33:13] everything else in this, right?<br>[33:16] >> Yeah. I mean, there are metrics built<br>[33:17] into the harness app. So, um, you know,<br>[33:20] I think Erin touched on it just a little<br>[33:22] bit earlier, but um, as soon as you turn<br>[33:24] something on, it is immediately starting<br>[33:26] to read that data. um and it is<br>[33:29] comparing you know the certain<br>[33:30] percentage of what you have enabled or<br>[33:33] the certain segment of group of people<br>[33:34] that you have enabled to you know the<br>[33:37] off um control group right so um you<br>[33:40] know we try to run our experiments for<br>[33:42] at least two weeks just to have a good<br>[33:45] amount of data um but the metrics are<br>[33:48] definitely built right there in the<br>[33:49] harness app um and I think we can um you<br>[33:53] know really narrow in on the ones that<br>[33:54] we value the most um and look at them<br>[33:57] from that perspective effective.<br>[33:59] >> Yeah. And to follow that up, there's a<br>[34:01] lot of metrics that we have created<br>[34:02] specifically.<br>[34:04] >> There are very specific use cases like<br>[34:07] we have user added a year make model to<br>[34:10] their garage. That's only going to be<br>[34:12] applicable for an automotive retailer.<br>[34:14] But on top of that, you have your<br>[34:16] general e-commerce ones. Revenue, AOV,<br>[34:20] conversion rate. We're watching those<br>[34:21] like a hawk. Um<br>[34:25] the closer to the metal that you can get<br>[34:27] the better. So if you are like changing<br>[34:32] your search algorithm, you should test<br>[34:35] for search product engagement. You<br>[34:38] shouldn't look at the overall revenue<br>[34:40] increase. Although it is important to<br>[34:42] keep an eye on that. It's just a couple<br>[34:44] steps removed from the feature that you<br>[34:47] are changing. Uh I would encourage I<br>[34:50] guess to have both. There's no reason to<br>[34:52] not have both as key metrics. Uh but<br>[34:55] definitely look as close as you can to<br>[34:57] the feature that you are changing.<br>[35:00] >> Absolutely.<br>[35:02] >> And AOV for those like myself not in<br>[35:05] e-commerce stands for average order<br>[35:08] value says the Google AI results. So I<br>[35:11] hope that's<br>[35:11] >> that is correct. I'm sorry.<br>[35:13] >> No, it's fine. I was like should I know<br>[35:16] this? Should I I don't work in<br>[35:17] e-commerce. It's okay. I don't know this<br>[35:18] to say online. Uh,<br>[35:20] >> threeletter acronyms.<br>[35:22] >> So many threeletter acronyms.<br>[35:23] >> Business and tech together. It's worse<br>[35:25] than the UN. We have another great<br>[35:28] audience question I want to get to<br>[35:30] before we wind down. How do you manage<br>[35:32] testing when you don't really know which<br>[35:34] other flags will be enabled when you<br>[35:36] release? Oh, and I guess this comes when<br>[35:39] we talk about the scale too of a bank,<br>[35:42] which is the largest tech companies for<br>[35:44] a lot of people.<br>[35:46] How I'm understanding that question is<br>[35:50] the test that you're writing like the<br>[35:52] code feature has multiple uh feature<br>[35:57] flags enabling it or maybe there's like<br>[35:59] a nesting there's some sort of<br>[36:01] dependency between the two. Um on that I<br>[36:05] would say communication is your friend.<br>[36:07] Make sure that you're talking to the<br>[36:08] person that is also in the area that<br>[36:11] you're working on. Um I would say the<br>[36:15] very best way to do it just from a<br>[36:18] statistical standpoint would be to have<br>[36:22] every condition covered. So make a truth<br>[36:25] table off off on on off on on um and<br>[36:30] figure out which one wins in those. Now<br>[36:32] it could be the case that some of those<br>[36:34] are not viable where there the<br>[36:36] dependency is such that<br>[36:38] it would cause an error state if one's<br>[36:40] on and the other's off. Um, if you can<br>[36:44] anticipate that, make sure it doesn't<br>[36:45] happen in code. If if that error case is<br>[36:49] met, uh, just do the default. Just do<br>[36:52] what was happening before and then alert<br>[36:55] on it so that the team can can go in and<br>[36:58] and fix that issue. Okay, that's<br>[37:00] definitely a case for avoiding your<br>[37:03] future flag debt going up too much and<br>[37:06] you know keep good hygiene as well so<br>[37:08] that doesn't happen because I honestly<br>[37:10] hadn't thought of that but it's dolls<br>[37:14] nesting dolls all the way down sometimes<br>[37:16] or turtles all the way down. So<br>[37:18] >> yeah.<br>[37:18] >> Yeah. Go.<br>[37:20] >> Oh, I was just going to say like we have<br>[37:22] a smaller team so it hasn't happened all<br>[37:24] that much. we're kind of in a whole<br>[37:25] bunch of different areas or one team's<br>[37:27] over here and another team's over over<br>[37:29] there. So, it doesn't happen all that<br>[37:31] much in practice as far as I know. Um,<br>[37:34] but for a larger team, I could<br>[37:35] definitely see that happening.<br>[37:37] >> Aaron, have you heard anything at some<br>[37:39] of the enterprises? Um I mean it is<br>[37:42] something you have to watch out for. But<br>[37:44] I think the if you look for um uh best<br>[37:49] practices for example or maturity of<br>[37:52] companies that are doing this well they<br>[37:53] try not to let that happen. Right? You<br>[37:56] want to be testing something very very<br>[37:57] specific and then you want to be doing<br>[38:00] quick experiments on whether that moves<br>[38:03] the needle or not and then moving on<br>[38:05] from there uh when you can. So you<br>[38:07] definitely don't want to be combining or<br>[38:09] even in your code having multiple<br>[38:12] triggers if you can help it because it<br>[38:13] just makes it more difficult obviously I<br>[38:16] guess to to figure out what what is<br>[38:18] actually going on. So the more specific<br>[38:20] you can be um and deliberate you can be<br>[38:22] and then the more experiments you can<br>[38:24] run um is going to lead to better<br>[38:27] results down the road.<br>[38:29] >> Yes. And and I will say just to add on<br>[38:31] uh Derek, correct me if I'm wrong at any<br>[38:33] point here, we also have a connection uh<br>[38:35] with harness in one of our Slack<br>[38:37] channels. Um so if anyone is changing a<br>[38:40] future flag or an experiment um it will<br>[38:42] automatically send a message to that<br>[38:44] Slack channel with the environment what<br>[38:46] was changed um etc. So all of our<br>[38:49] developers have access to that. Now<br>[38:51] that's on you know the engineers to be<br>[38:53] reading that but it is just another way<br>[38:56] to like hey this is changing. Um, so<br>[38:59] just that that there's more<br>[39:00] communication out there as well.<br>[39:02] >> Yeah. And and of course, like I said<br>[39:04] before, if you're if you're using<br>[39:06] policies and pipelines in the product,<br>[39:08] you can also set that as a check right<br>[39:10] before it goes live. So you can c you<br>[39:13] can catch things and you can do hooks<br>[39:15] into Slack and all kinds of other<br>[39:17] applications as well. So yeah,<br>[39:20] >> and when it comes down to it, we're<br>[39:22] talking about technology, but people and<br>[39:24] processes are what tend to be the most<br>[39:27] important part of any technical change.<br>[39:30] So as we wind down and since stating<br>[39:33] goals make them more likely to come<br>[39:35] true, where do you hope that your<br>[39:38] organization goes next on your future<br>[39:40] flag journey, how you're going to<br>[39:41] leverage them next?<br>[39:47] That's that's a good question.<br>[39:50] >> Is AI going to be involved or no?<br>[39:54] >> Most likely, yes. Um, we are very<br>[39:56] heavily experimenting with AI at this<br>[39:58] point. So, you know, we're always<br>[39:59] looking for ways to evolve. I would say<br>[40:01] we're very much proactive in many<br>[40:04] different aspects of looking into, you<br>[40:06] know, how can we always be better? Um,<br>[40:08] AI is definitely on that. Uh, Derek, do<br>[40:10] you have any specifics there maybe?<br>[40:13] >> Yeah. Uh, one annoying experience that<br>[40:16] I've had with AI is like the<br>[40:18] configuration on the requests to an AI<br>[40:21] agent. Uh, you can change from chat GPT<br>[40:26] to the newest version that Anthropic has<br>[40:28] out and they've been updating versions<br>[40:31] fairly often. One convenient thing that<br>[40:34] I've done is I've made a feature flag, a<br>[40:37] permanent one that just has what model I<br>[40:39] want to use in the prompt text so that I<br>[40:42] don't have to do a deployment every time<br>[40:44] I change my integration with AI. I can<br>[40:47] just go and change the model in the<br>[40:49] configuration.<br>[40:51] >> Well, within the feature flag, you then<br>[40:53] update that notification. So it's on<br>[40:56] your list like hey when this update<br>[40:58] happens every other week probably right<br>[41:01] now at the speed we're going at you set<br>[41:03] it it's like on your list of things to<br>[41:06] do when you're of your own hygiene your<br>[41:08] own best practices with AI.<br>[41:12] >> Uh if there's not a problem I won't go<br>[41:14] and change it. But when I'm finding that<br>[41:18] one certain model is not doing what I<br>[41:20] want it to do and there's another one<br>[41:22] out there, maybe it maybe I'm changing<br>[41:24] from like a a thinking model that has<br>[41:27] the ability to scrape websites to just a<br>[41:29] nano or something for cost reasons. I<br>[41:32] can I can do that from a feature flag<br>[41:35] via that configuration. Very similar to<br>[41:38] the recommendation example I showed<br>[41:39] earlier. Um it makes it a lot easier so<br>[41:43] that I don't have to go and deploy all<br>[41:44] my services to up update my codes<br>[41:48] integration with a model.<br>[41:50] >> Yeah. And this goes down a pretty big<br>[41:51] rabbit hole of token use and all kinds<br>[41:55] of other things, right? Where you could<br>[41:58] very easily switch processes from one<br>[42:00] model to another, from one prompt to<br>[42:02] another um using feature flags um in a<br>[42:06] way that you know could could actually<br>[42:08] impact the bottom line. It could make<br>[42:10] your results better or worse. I mean, it<br>[42:12] has all sorts of implications to how<br>[42:14] you're using AI in your in your<br>[42:16] environment right now. That's a great<br>[42:18] example.<br>[42:19] >> So important. I wish you luck in your<br>[42:22] fle feature flag progressive delivery<br>[42:25] experimentation. Somebody had to make it<br>[42:27] illiterative to make me more challenged<br>[42:29] as a host. Uh, and I'm so grateful to<br>[42:32] the audience. First of all, you've<br>[42:34] brought great questions. There is a free<br>[42:37] harness demo that you can get in the<br>[42:39] resources so you can play around with<br>[42:41] feature flags because experimentation<br>[42:43] starts with experimentation<br>[42:46] and we know developers especially want<br>[42:48] to get their hands on it. But I love<br>[42:50] that also the business stakeholders can<br>[42:52] too. And thank you so much to Derek,<br>[42:54] Kelly and Aaron and have a great day<br>[42:57] all. Thank you.<br>[42:59] >> Yeah, thank you very much. It's been<br>[43:00] great.<br>[43:00] >> Thank you.<br>[43:03] Hey, hey, hey. <!-- deep-read:sections end --> ๐Ÿ“„ **Full text:** ![[Full Document Contents/Articles/Case Study Feature Flags IRL.md|Case Study: Feature Flags IRL by YouTube]] ## Highlights - came in contact with this years and years ago, but it's evolved way beyond that, right? And and when you add experimentation on on that as well, now you're able to actually uh do exactly what Dererick and Kelly just said, right? which is you're not just it does solve the problem of these massive deployments that you want to break up into their uh individual components or individual features that you can then turn on and off but it's also a way to test those and see if they're working. So, you turn on a flag, but you only ([View Highlight](https://read.readwise.io/read/01kqzg0k1t9kx2154skthhxs5j)) - Tags: ๐Ÿ‘ป ai highlighted - important. So if a developer can see, oh, I can wrap this new feature that I'm building that I'm not going to have any test on. I have no intention on testing it, but it ensures the safety of the overall experience. and if something's broken on a deployment, I can just go turn it off immediately. I think that was a really good selling point for the engineering team, too. And it also helped the the adoption of it. I think maybe the more business background, the ([View Highlight](https://read.readwise.io/read/01kqzg0k4pnekgja3kx1wvjvn4)) - Tags: ๐Ÿ‘ป ai highlighted - business-minded people really like the experiments and like the business outcome side of it. Like that that's makes intuitive sense to that crowd. But the safety and honestly reputation that comes with engineers is my code works and and that helps the adoption of feature flags from the from the technical side. >> That also closes that important feedback loop that's so that cognitive load that developers are holding and at a two week sprint you maybe didn't even remember ([View Highlight](https://read.readwise.io/read/01kqzg0k6m3sjnnq1g4yeday9v)) - Tags: ๐Ÿ‘ป ai highlighted - are things are not as much as you want to experiment things are not always in your control. they may be in the world's largest shipping company's control that you are a very valued partner. So you have to figure that out and I think that's a really valid point. I'd love to get into the practicality now. Derek, do you want to tell us about how you actually go about what a feature flag looks like from the technical end? It sounds like Kelly on a more my style ([View Highlight](https://read.readwise.io/read/01kqzg0kbjsj6ng6t9aann7pkc)) - Tags: ๐Ÿ‘ป ai highlighted - deployment. Uh it's instantly realized on the client. >> Wow. Fantastic. >> Yeah, I think that's an important um as people are learning how to do this or maybe trying to create their own DIY feature flag uh practice. Um, it it is kind of amazing because all this runs client side, how quickly you can change things. You change a feature flag and it's I I I can't say it's instantaneous from a mathematical perspective because that's not true. But when you're ([View Highlight](https://read.readwise.io/read/01kqzg0kfp470exdc8jptepv3r)) - Tags: ๐Ÿ‘ป ai highlighted - entering >> for sure. >> Yeah. And it's super convenient. Like it used to be a panic, right? like we would, oh no, we have to go and do a deployment to turn off our warehouse and you want me to do that right now at 6:00 in the morning because it's snowing outside. Now it's just a feature flag. We did that that work once and we have the ability to toggle it whenever we want to. >> And you would call that like an evergreen feature flag. We had talked about feature flags that you reuse or keep running, but feature flag debt is ([View Highlight](https://read.readwise.io/read/01kqzg0kq3kzppeg5ns3wg0fg8)) - Tags: ๐Ÿ‘ป ai highlighted - had an experiment and then you uh concluded the experiment, then you moved on with your life or you just had that safety feature flag where your code was behind a feature flag, you were able to deploy it, test it on yourself, not an experiment, and then just turn it on. Those feature flags do hang around. They do hang around. One thing that we have done to combat that is uh harness has an API and we have a task that will go and ([View Highlight](https://read.readwise.io/read/01kqzg0kw8t10bmgenhz2pb2fg)) - Tags: ๐Ÿ‘ป ai highlighted - the audience. First of all, you've brought great questions. There is a free harness demo that you can get in the resources so you can play around with feature flags because experimentation starts with experimentation and we know developers especially want to get their hands on it. But I love that also the business stakeholders can too. And thank you so much to Derek, Kelly and Aaron and have a great day all. Thank you. >> Yeah, thank you very much. It's been ([View Highlight](https://read.readwise.io/read/01kqzg0m6egcmfe9yrm2ecjcag)) - Tags: ๐Ÿ‘ป ai highlighted