Files
nexus/sreweekly/articles/262/07-testing-in-production-for-safety-and-sanity.html
2026-09-12 17:23:01 +08:00

47 lines
468 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en-US"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/06a57141b3ff4399-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/1c175694bc1e8ad8-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/415c659d58f62aff-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/751909690a1a74fa-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/8fe56b4ac583f0e1-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/a205fd595a9beeab-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/c314d5394508c5c7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/cbde3fd2db275844-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/d865ae18e54dcb9c-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/eb42eb886f642af5-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/f5e01691c8be1cce-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" imageSrcSet="https://images.prismic.io/launchdarkly/0e9e30d7-d680-443e-a070-2533f2e5e942_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress%2Cformat&amp;rect=0%2C0%2C4000%2C2252&amp;w=2048&amp;fit=max&amp;q=80 1x, https://images.prismic.io/launchdarkly/0e9e30d7-d680-443e-a070-2533f2e5e942_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress%2Cformat&amp;rect=0%2C0%2C4000%2C2252&amp;w=3840&amp;fit=max&amp;q=80 2x"/><link rel="preload" as="image" href="https://prismic-io.s3.amazonaws.com/launchdarkly/0f0cf3b4-9f25-43fe-bdb8-3442b04f8c08_Test+in+production+.png"/><link rel="preload" as="image" href="https://prismic-io.s3.amazonaws.com/launchdarkly/945b0bd7-318e-4d5a-8320-475d49172d85_Release+progressions.png"/><link rel="preload" as="image" href="https://images.prismic.io/launchdarkly/9679ba40-a513-4cf2-9099-c307cad8f380_Release+progressions+2.png?auto=compress,format"/><link rel="preload" as="image" href="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ajRwTY1P9HI4UtaI_img-bg--footer-get-demo.svg"/><link rel="preload" as="image" href="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ajRwTI1P9HI4UtaH_img-bg--footer-free-trial.svg"/><link rel="preload" as="image" href="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ajRwS41P9HI4UtaG_img-bg--footer-code-control.svg"/><link rel="preload" as="image" href="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ajRwSo1P9HI4UtaF_img-bg--footer-agent-control.svg"/><link rel="stylesheet" href="/_next/static/css/4b895a9a0ceca7ed.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/6aeb3fbd013f7055.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/baa31bc0bc2753e2.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/b694ee22169cc940.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/455e5680c78aaa64.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/668223e4ce0896ff.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/71e7e41975824f9a.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/499e8ecba60a437c.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c13c7b31349c3e1e.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/eb8c52289887f66e.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/76ba66facbc12026.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/61c845f39508ea49.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/9506ad2d29f3da93.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c96dfd09a5295fdd.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/ffc1747465c21b7c.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/a3d1e33a3a179b4c.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/ab4a69f65a7a2b93.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/5b017ffd652d07f8.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c2a2739e0e57e14c.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/0e421a84dd333b11.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/f188bfa3f9063907.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/f08af977962d892c.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/741f4cf49b054cf0.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/a05c4c008283c998.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/271699adbe3692a1.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/6bcd99eac94adccc.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/9860101428a5e484.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/34a11c3f23439233.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/b60911417b616c72.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/e217cbe846d54f5a.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/437c2c516d87ce24.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c240dbaacd91d7b6.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/e2768b37f0a7179e.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/3771f60faaafd2e7.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/e22ba8bc372dffa3.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/7a4ebd8c71fa9dec.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/42eebaa13cfadd34.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/0b0e39f220873667.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/f70e0c2fa3894b2b.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/2a1b94a1fafb21a0.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/372992834c739f06.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-6feccfddff7ef52e.js"/><script src="/_next/static/chunks/f5e865f6-f7ce3acdc8f53367.js" async=""></script><script src="/_next/static/chunks/4478-fb3dc47bb56134a0.js" async=""></script><script src="/_next/static/chunks/main-app-21b96efeeed761a7.js" async=""></script><script src="/_next/static/chunks/7503-b90474bdcb57e2a8.js" async=""></script><script src="/_next/static/chunks/7724-f653158a9ba1984f.js" async=""></script><script src="/_next/static/chunks/2151-1b788faaa737d8a8.js" async=""></script><script src="/_next/static/chunks/8149-7f3e93382769fd21.js" async=""></script><script src="/_next/static/chunks/4544-0392fd1bc10fce67.js" async=""></script><script src="/_next/static/chunks/8072-5f4bd0e6a2406823.js" async=""></script><script src="/_next/static/chunks/7950-199b90cf99360b48.js" async=""></script><script src="/_next/static/chunks/6486-65f1afba5f178bdd.js" async=""></script><script src="/_next/static/chunks/4089-4672fdbd787dddc6.js" async=""></script><script src="/_next/static/chunks/5265-7f81f179d2fa0221.js" async=""></script><script src="/_next/static/chunks/685-dc88876e3a3ca418.js" async=""></script><script src="/_next/static/chunks/8941-6bf805c661ac7247.js" async=""></script><script src="/_next/static/chunks/739-f05d34af20af1cd5.js" async=""></script><script src="/_next/static/chunks/4661-d6f876059d7e275f.js" async=""></script><script src="/_next/static/chunks/7550-010a17a69ff132e0.js" async=""></script><script src="/_next/static/chunks/9244-3b918f1b79c82aa2.js" async=""></script><script src="/_next/static/chunks/8687-88b6a1a725cd10c9.js" async=""></script><script src="/_next/static/chunks/8634-33081268eea6ca62.js" async=""></script><script src="/_next/static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js" async=""></script><script src="/_next/static/chunks/app/layout-5d77b524524e53c1.js" async=""></script><script src="/_next/static/chunks/app/not-found-497554e3668544b1.js" async=""></script><link rel="preload" href="https://consent.cookiebot.com/uc.js" as="script"/><link rel="preload" href="https://www.googletagmanager.com/gtm.js?id=GTM-WRKKC89" as="script"/><link rel="expect" href="#_R_" blocking="render"/><meta name="next-size-adjust" content=""/><meta name="theme-color" content="#FFF"/><title>Testing in Production to Stay Safe and Sensible - LaunchDarkly | LaunchDarkly</title><meta name="description" content="Testing software changes in a real-world production environment is essential to modern development. Learn how to test in production safely with feature flags using a feature management platform."/><meta name="application-name" content="LaunchDarkly"/><meta name="author" content="LaunchDarkly"/><meta name="generator" content="LaunchDarkly"/><meta name="referrer" content="origin-when-cross-origin"/><meta name="creator" content="LaunchDarkly"/><meta name="publisher" content="LaunchDarkly"/><meta name="robots" content="index"/><meta name="googlebot" content="index"/><link rel="canonical" href="https://launchdarkly.com/blog/testing-in-production-for-safety-and-sanity/"/><meta name="format-detection" content="telephone=no, address=no, email=no"/><meta property="og:title" content="Testing in Production to Stay Safe and Sensible - LaunchDarkly | LaunchDarkly"/><meta property="og:description" content="Testing software changes in a real-world production environment is essential to modern development. Learn how to test in production safely with feature flags using a feature management platform."/><meta property="og:url" content="https://launchdarkly.com/blog/testing-in-production-for-safety-and-sanity/"/><meta property="og:site_name" content="LaunchDarkly"/><meta property="og:locale" content="en_US"/><meta property="og:image" content="https://images.prismic.io/launchdarkly/f44cc827-b177-4531-8dc0-25a0ed02bcc9_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress,format"/><meta property="og:image:width" content="4000"/><meta property="og:image:height" content="2314"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@LaunchDarkly"/><meta name="twitter:title" content="Testing in Production to Stay Safe and Sensible - LaunchDarkly | LaunchDarkly"/><meta name="twitter:description" content="Testing software changes in a real-world production environment is essential to modern development. Learn how to test in production safely with feature flags using a feature management platform."/><meta name="twitter:image" content="https://images.prismic.io/launchdarkly/f44cc827-b177-4531-8dc0-25a0ed02bcc9_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress,format"/><meta name="twitter:image:width" content="4000"/><meta name="twitter:image:height" content="2314"/><link rel="icon" href="/favicon.ico" type="image/x-icon" sizes="96x96"/><link rel="icon" href="/icon.png?8354b0c15ee5b065" type="image/png" sizes="96x96"/><link rel="apple-touch-icon" href="/apple-icon.png?8354b0c15ee5b065" type="image/png" sizes="96x96"/><script id="cookie-consent-script" data-cookieconsent="ignore">
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("consent", "default", {
ad_storage: "denied",
ad_user_data: "denied",
ad_personalization: "denied",
analytics_storage: "denied",
functionality_storage: "denied",
personalization_storage: "denied",
security_storage: "granted",
wait_for_update: 500,
});
gtag("set", "ads_data_redaction", true);
gtag("set", "url_passthrough", true);
</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_918804 __variable_81b511 __variable_3ebb29 __variable_a7dd04 __variable_479fb2"><div hidden=""><!--$--><!--/$--></div><script>(self.__next_s=self.__next_s||[]).push(["https://consent.cookiebot.com/uc.js",{"data-cbid":"a9e2be18-730c-4afe-89dc-251a408727a0","data-blockingmode":"auto","type":"text/javascript","data-georegions":"{'region':'AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IE, IS, IT, LI, LT, LU, LV, MT, NL, NO, PL, PT, RO, SK, SI, ES, SE, GB','cbid':'d7afae1f-c20d-4849-be5c-a875c8c184a0'}","id":"cookiebot"}])</script><div class="styles-module__4bne7a__layers"></div><section class="styles-module__NFwUga__newSection styles-module__aO7DCW__aboveMenuBanner "><div class="styles-module__NFwUga__contentContainer styles-module__aO7DCW__aboveMenuBannerContainer"><div><p class="styles-module__J0n02W__variant_textSmallMedium styles-module__J0n02W__paragraph styles-module__J0n02W__color_gray02 styles-module__J0n02W__weight_medium">[Hands-on workshop] Managing AI Agents in Production - Sep 17<!-- --> — <a target="_self" tabindex="0" href="/webinars/runtime-labs-managing-ai-agents-in-production-sept-17/">Save my seat</a></p></div><div class="styles-module__aO7DCW__closeButtonContainer"><button type="button" class="styles-module__aO7DCW__closeButton" aria-label="Close banner"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aNWwCp5xUNkB1HlJ_icon--close-white-narrow.svg" alt="" loading="lazy"/></button></div></div></section><a id="home" tabindex="-1"></a><div class="styles-module__EPiYHG__accessibilityMenu"><span class="styles-module__EPiYHG__label">Skip to:</span><nav><ul><li><a href="/" class="styles-module__EPiYHG__link" tabindex="0" title="Skip to Home">Home</a></li><li><a href="#content" class="styles-module__EPiYHG__link" tabindex="0" title="Skip to Content">Content</a></li><li><a href="#footer" class="styles-module__EPiYHG__link" tabindex="0" title="Skip to Footer navigation">Footer navigation</a></li></ul></nav></div><div class="styles-module__stVVvG__refreshDesignNavDock"></div><header class="header-nav oldstyles-module__hgjkrG__header styles-module__stVVvG__header undefined styles-module__stVVvG__useRefreshDesign "><div class="styles-module__stVVvG__refreshDesignNavDockIcons"><div class="styles-module__stVVvG__refreshDesignNavDockBar"></div></div><nav class="oldstyles-module__hgjkrG__nav styles-module__stVVvG__nav " aria-label="Main"><div class="oldstyles-module__hgjkrG__brand styles-module__stVVvG__brand styles-module__stVVvG__useWhiteLogo"><div class="styles-module__stVVvG__brandLogoContainer"><a class="styles-module__SHyKFW__logo oldstyles-module__hgjkrG__brand styles-module__stVVvG__brandLogo" target="_self" tabindex="0" aria-label="LaunchDarkly Home" data-analytics="nav-logo" href="/"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 156 24"><g fill="#fff" clip-path="url(#brand-light_svg__a)"><path d="M9.33 18.729V16.45H2.578V5.272H0v13.457zm6.486-.424q.837-.636 1.276-1.669v2.093h2.472v-6.49c0-.689-.159-1.325-.505-1.854s-.851-.954-1.488-1.245-1.409-.45-2.286-.45c-.479 0-.957.053-1.409.132a6.4 6.4 0 0 0-1.276.371 6 6 0 0 0-1.09.556l.08 2.305c.611-.397 1.196-.689 1.781-.901s1.223-.318 1.94-.318c.558 0 1.01.133 1.329.397s.478.609.478 1.033v.662h-2.233c-1.329 0-2.366.265-3.136.821s-1.143 1.325-1.143 2.305a3.1 3.1 0 0 0 .372 1.483 2.56 2.56 0 0 0 1.09 1.033c.478.265 1.037.371 1.648.371.851 0 1.542-.212 2.1-.636zm-2.233-1.669a1.08 1.08 0 0 1-.425-.874 1.12 1.12 0 0 1 .585-1.033c.372-.239.957-.371 1.701-.371h1.595v.371c0 .318-.08.636-.266.98a2.35 2.35 0 0 1-.824.874 2.33 2.33 0 0 1-1.276.371c-.452 0-.824-.106-1.09-.318m13.848 1.642c.585-.503 1.01-1.192 1.276-2.04v2.49h2.499V8.98h-2.498v4.556q0 .993-.319 1.748c-.319.755-.505.927-.904 1.192a2.23 2.23 0 0 1-1.356.424c-.558 0-.983-.159-1.302-.477-.292-.318-.452-.795-.452-1.404V8.98h-2.499v6.093c0 1.272.292 2.225.904 2.914s1.409 1.033 2.445 1.033c.904 0 1.621-.238 2.206-.742m9.011.45v-4.556q0-.993.319-1.748c.319-.755.505-.927.877-1.192.372-.291.824-.424 1.329-.424.558 0 .983.159 1.302.477.292.318.452.795.452 1.404v6.066h2.525v-6.093c0-1.271-.292-2.225-.904-2.914s-1.409-1.033-2.445-1.033c-.877 0-1.595.265-2.18.742-.558.503-.983 1.192-1.276 2.04v-2.49h-2.498v9.748h2.499zm15.257.212a8 8 0 0 0 .904-.212c.292-.079.532-.186.797-.265l.027-2.358c-.399.212-.824.344-1.276.45a6 6 0 0 1-1.356.159c-.665 0-1.249-.132-1.701-.371a2.24 2.24 0 0 1-1.01-1.033 3.25 3.25 0 0 1-.319-1.457 3.34 3.34 0 0 1 .319-1.457c.213-.424.558-.768 1.01-1.033s1.01-.371 1.648-.371a6 6 0 0 1 1.409.159c.452.106.851.265 1.249.45l-.027-2.437c-.292-.106-.558-.212-.824-.265a4.3 4.3 0 0 0-.904-.159 6.3 6.3 0 0 0-1.037-.079c-1.116 0-2.073.238-2.897.689a4.95 4.95 0 0 0-1.914 1.854c-.452.795-.664 1.669-.664 2.676 0 .98.239 1.881.691 2.649a4.65 4.65 0 0 0 1.914 1.801c.824.424 1.781.662 2.871.662.399.026.771 0 1.09-.053zm6.459-.212v-4.556q0-.993.319-1.748c.319-.755.505-.927.904-1.192a2.15 2.15 0 0 1 1.329-.424c.585 0 1.01.159 1.302.477s.452.795.452 1.404v6.066h2.499v-6.093c0-1.271-.292-2.225-.904-2.914s-1.409-1.033-2.445-1.033c-.877 0-1.621.265-2.18.742-.585.503-1.01 1.192-1.276 2.04V5.272h-2.472v13.457zm14.885 0c1.435 0 2.658-.265 3.668-.821a5.6 5.6 0 0 0 2.313-2.331c.532-1.006.797-2.199.797-3.55s-.266-2.543-.797-3.55-1.302-1.801-2.312-2.358-2.233-.821-3.668-.821H67.86v13.457h5.183zm-2.605-2.278v-8.9h2.578c1.302 0 2.313.397 3.03 1.166.744.795 1.09 1.881 1.09 3.285s-.372 2.517-1.09 3.285c-.744.768-1.754 1.165-3.03 1.165h-2.578zm15.922 1.854a4 4 0 0 0 1.276-1.669v2.093h2.472v-6.49c0-.689-.159-1.325-.505-1.854s-.851-.954-1.489-1.245-1.409-.45-2.286-.45c-.478 0-.957.053-1.409.132a6.4 6.4 0 0 0-1.276.371 6 6 0 0 0-1.09.556l.08 2.305c.611-.397 1.196-.689 1.781-.901s1.223-.318 1.94-.318c.558 0 1.01.133 1.329.397s.478.609.478 1.033v.662h-2.18c-1.329 0-2.366.265-3.136.821s-1.143 1.325-1.143 2.305a3.1 3.1 0 0 0 .372 1.483 2.56 2.56 0 0 0 1.09 1.033c.478.265 1.037.371 1.648.371.824 0 1.489-.212 2.047-.636zm-2.233-1.669a1.08 1.08 0 0 1-.425-.874 1.12 1.12 0 0 1 .585-1.033c.372-.239.957-.371 1.701-.371h1.595v.371c0 .318-.08.636-.266.98a2.35 2.35 0 0 1-.824.874c-.372.238-.771.344-1.249.344-.452.027-.824-.079-1.116-.291zm11.031 2.093V14.57c0-1.086.239-1.907.691-2.464s1.09-.848 1.861-.848a3.3 3.3 0 0 1 1.037.159v-2.41c-.159-.053-.319-.079-.478-.106s-.346-.026-.532-.026c-.611 0-1.143.212-1.568.636s-.771 1.033-.983 1.775V8.954h-2.499v9.748h2.472v.026zm7.681 0v-3.152l.904-.848 2.924 4h2.977l-4.173-5.695 4.093-4.053h-3.136l-3.562 3.444V5.272h-2.472v13.457zm10.819 0V5.272h-2.499v13.457zm3.827 3.629c.93 0 1.675-.185 2.259-.556s1.064-1.033 1.462-1.96l4.492-10.861h-2.578l-2.631 6.808-2.712-6.808h-2.578l4.014 9.722-.213.503c-.133.318-.292.583-.531.715-.213.159-.559.238-1.011.238h-2.073v2.199zM144.092 24a.56.56 0 0 1-.478-.291c-.08-.185-.08-.371.053-.53l5.662-7.762-9.915 4.027c-.08.027-.133.053-.212.053a.52.52 0 0 1-.505-.371c-.08-.212.026-.45.212-.583l8.719-5.113-15.337-.874a.525.525 0 0 1-.505-.53.52.52 0 0 1 .505-.53l15.337-.874-8.719-5.113c-.186-.132-.292-.371-.212-.583s.265-.371.505-.371c.079 0 .132.026.212.053l9.915 4.026-5.662-7.788c-.106-.159-.133-.371-.053-.53a.5.5 0 0 1 .478-.291c.133 0 .266.053.372.159l11.271 11.205c.159.159.239.397.239.609s-.08.424-.239.609l-11.271 11.232a.53.53 0 0 1-.372.159z"></path></g><defs><clipPath id="brand-light_svg__a"><path fill="#fff" d="M0 0h156v24H0z"></path></clipPath></defs></svg></a></div></div><div class="oldstyles-module__hgjkrG__navInner styles-module__stVVvG__navInner container"><div class="styles-module__stVVvG__navInnerCorner styles-module__stVVvG__refreshDesignNavCurbLeft"><svg xmlns="http://www.w3.org/2000/svg" width="19" height="21" fill="none"><path fill="#212121" d="M19 19C19 8.507 10.493 0 0 0h19z"></path></svg></div><div class="styles-module__stVVvG__navInnerCorner styles-module__stVVvG__refreshDesignNavCurbRight"><svg xmlns="http://www.w3.org/2000/svg" width="19" height="21" fill="none"><path fill="#212121" d="M0 19C0 8.507 8.507 0 19 0H0z"></path></svg></div><div class="oldstyles-module__hgjkrG__mobileButtonsContainer"><a class="button oldstyles-module__hgjkrG__requestDemoMobileButton styles-module__stVVvG__refreshDesignRequestDemoMobileButton" id="main-nav-mobile-request-demo" target="_self" tabindex="0" data-analytics="nav-mobile-get-a-demo" href="/request-a-demo/">Get a demo</a></div><input type="checkbox" id="activate-menu-old" class="oldstyles-module__hgjkrG__mobileBurgerMenu" aria-label="Toggle navigation menu"/><div class="oldstyles-module__hgjkrG__burger undefined"></div><div class="oldstyles-module__hgjkrG__whiteOverlay"><a class="styles-module__SHyKFW__logo" target="_self" tabindex="0" aria-label="LaunchDarkly Home" data-analytics="nav-mobile-logo" href="/"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 156 24"><g fill="#fff" clip-path="url(#brand-light_svg__a)"><path d="M9.33 18.729V16.45H2.578V5.272H0v13.457zm6.486-.424q.837-.636 1.276-1.669v2.093h2.472v-6.49c0-.689-.159-1.325-.505-1.854s-.851-.954-1.488-1.245-1.409-.45-2.286-.45c-.479 0-.957.053-1.409.132a6.4 6.4 0 0 0-1.276.371 6 6 0 0 0-1.09.556l.08 2.305c.611-.397 1.196-.689 1.781-.901s1.223-.318 1.94-.318c.558 0 1.01.133 1.329.397s.478.609.478 1.033v.662h-2.233c-1.329 0-2.366.265-3.136.821s-1.143 1.325-1.143 2.305a3.1 3.1 0 0 0 .372 1.483 2.56 2.56 0 0 0 1.09 1.033c.478.265 1.037.371 1.648.371.851 0 1.542-.212 2.1-.636zm-2.233-1.669a1.08 1.08 0 0 1-.425-.874 1.12 1.12 0 0 1 .585-1.033c.372-.239.957-.371 1.701-.371h1.595v.371c0 .318-.08.636-.266.98a2.35 2.35 0 0 1-.824.874 2.33 2.33 0 0 1-1.276.371c-.452 0-.824-.106-1.09-.318m13.848 1.642c.585-.503 1.01-1.192 1.276-2.04v2.49h2.499V8.98h-2.498v4.556q0 .993-.319 1.748c-.319.755-.505.927-.904 1.192a2.23 2.23 0 0 1-1.356.424c-.558 0-.983-.159-1.302-.477-.292-.318-.452-.795-.452-1.404V8.98h-2.499v6.093c0 1.272.292 2.225.904 2.914s1.409 1.033 2.445 1.033c.904 0 1.621-.238 2.206-.742m9.011.45v-4.556q0-.993.319-1.748c.319-.755.505-.927.877-1.192.372-.291.824-.424 1.329-.424.558 0 .983.159 1.302.477.292.318.452.795.452 1.404v6.066h2.525v-6.093c0-1.271-.292-2.225-.904-2.914s-1.409-1.033-2.445-1.033c-.877 0-1.595.265-2.18.742-.558.503-.983 1.192-1.276 2.04v-2.49h-2.498v9.748h2.499zm15.257.212a8 8 0 0 0 .904-.212c.292-.079.532-.186.797-.265l.027-2.358c-.399.212-.824.344-1.276.45a6 6 0 0 1-1.356.159c-.665 0-1.249-.132-1.701-.371a2.24 2.24 0 0 1-1.01-1.033 3.25 3.25 0 0 1-.319-1.457 3.34 3.34 0 0 1 .319-1.457c.213-.424.558-.768 1.01-1.033s1.01-.371 1.648-.371a6 6 0 0 1 1.409.159c.452.106.851.265 1.249.45l-.027-2.437c-.292-.106-.558-.212-.824-.265a4.3 4.3 0 0 0-.904-.159 6.3 6.3 0 0 0-1.037-.079c-1.116 0-2.073.238-2.897.689a4.95 4.95 0 0 0-1.914 1.854c-.452.795-.664 1.669-.664 2.676 0 .98.239 1.881.691 2.649a4.65 4.65 0 0 0 1.914 1.801c.824.424 1.781.662 2.871.662.399.026.771 0 1.09-.053zm6.459-.212v-4.556q0-.993.319-1.748c.319-.755.505-.927.904-1.192a2.15 2.15 0 0 1 1.329-.424c.585 0 1.01.159 1.302.477s.452.795.452 1.404v6.066h2.499v-6.093c0-1.271-.292-2.225-.904-2.914s-1.409-1.033-2.445-1.033c-.877 0-1.621.265-2.18.742-.585.503-1.01 1.192-1.276 2.04V5.272h-2.472v13.457zm14.885 0c1.435 0 2.658-.265 3.668-.821a5.6 5.6 0 0 0 2.313-2.331c.532-1.006.797-2.199.797-3.55s-.266-2.543-.797-3.55-1.302-1.801-2.312-2.358-2.233-.821-3.668-.821H67.86v13.457h5.183zm-2.605-2.278v-8.9h2.578c1.302 0 2.313.397 3.03 1.166.744.795 1.09 1.881 1.09 3.285s-.372 2.517-1.09 3.285c-.744.768-1.754 1.165-3.03 1.165h-2.578zm15.922 1.854a4 4 0 0 0 1.276-1.669v2.093h2.472v-6.49c0-.689-.159-1.325-.505-1.854s-.851-.954-1.489-1.245-1.409-.45-2.286-.45c-.478 0-.957.053-1.409.132a6.4 6.4 0 0 0-1.276.371 6 6 0 0 0-1.09.556l.08 2.305c.611-.397 1.196-.689 1.781-.901s1.223-.318 1.94-.318c.558 0 1.01.133 1.329.397s.478.609.478 1.033v.662h-2.18c-1.329 0-2.366.265-3.136.821s-1.143 1.325-1.143 2.305a3.1 3.1 0 0 0 .372 1.483 2.56 2.56 0 0 0 1.09 1.033c.478.265 1.037.371 1.648.371.824 0 1.489-.212 2.047-.636zm-2.233-1.669a1.08 1.08 0 0 1-.425-.874 1.12 1.12 0 0 1 .585-1.033c.372-.239.957-.371 1.701-.371h1.595v.371c0 .318-.08.636-.266.98a2.35 2.35 0 0 1-.824.874c-.372.238-.771.344-1.249.344-.452.027-.824-.079-1.116-.291zm11.031 2.093V14.57c0-1.086.239-1.907.691-2.464s1.09-.848 1.861-.848a3.3 3.3 0 0 1 1.037.159v-2.41c-.159-.053-.319-.079-.478-.106s-.346-.026-.532-.026c-.611 0-1.143.212-1.568.636s-.771 1.033-.983 1.775V8.954h-2.499v9.748h2.472v.026zm7.681 0v-3.152l.904-.848 2.924 4h2.977l-4.173-5.695 4.093-4.053h-3.136l-3.562 3.444V5.272h-2.472v13.457zm10.819 0V5.272h-2.499v13.457zm3.827 3.629c.93 0 1.675-.185 2.259-.556s1.064-1.033 1.462-1.96l4.492-10.861h-2.578l-2.631 6.808-2.712-6.808h-2.578l4.014 9.722-.213.503c-.133.318-.292.583-.531.715-.213.159-.559.238-1.011.238h-2.073v2.199zM144.092 24a.56.56 0 0 1-.478-.291c-.08-.185-.08-.371.053-.53l5.662-7.762-9.915 4.027c-.08.027-.133.053-.212.053a.52.52 0 0 1-.505-.371c-.08-.212.026-.45.212-.583l8.719-5.113-15.337-.874a.525.525 0 0 1-.505-.53.52.52 0 0 1 .505-.53l15.337-.874-8.719-5.113c-.186-.132-.292-.371-.212-.583s.265-.371.505-.371c.079 0 .132.026.212.053l9.915 4.026-5.662-7.788c-.106-.159-.133-.371-.053-.53a.5.5 0 0 1 .478-.291c.133 0 .266.053.372.159l11.271 11.205c.159.159.239.397.239.609s-.08.424-.239.609l-11.271 11.232a.53.53 0 0 1-.372.159z"></path></g><defs><clipPath id="brand-light_svg__a"><path fill="#fff" d="M0 0h156v24H0z"></path></clipPath></defs></svg></a></div><div class="oldstyles-module__hgjkrG__mainNavGroup styles-module__stVVvG__mainNavGroup main-nav-container" id="mainNavigation"><nav aria-label="Main navigation" class="oldstyles-module__hgjkrG__mainNav"><div class="styles-module__wa_yaW__mainNavParent nav--main-nav-parent"><div class="moreStyles-module__udQsYq__parentNavItem styles-module__wa_yaW__parentNavItem main-nav-parent-nav-item"><div class="moreStyles-module__udQsYq__navItem styles-module__wa_yaW__navItem" id="platform" data-analytics="nav-platform" role="button" tabindex="0"><span class="moreStyles-module__udQsYq__navItemTitle styles-module__wa_yaW__navItemTitle main-nav-title">Platform</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__wa_yaW__mobileCaretClosed "><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div><div class="
moreStyles-module__udQsYq__dropdown
main-nav-dropdown
platform
styles-module__wa_yaW__dropdown
"><div class="moreStyles-module__udQsYq__dropdownContainer styles-module__wa_yaW__dropdownContainer main-nav-dropdown-container"><div class="moreStyles-module__udQsYq__linksContainer styles-module__wa_yaW__linksContainer"><div class="styles-module__wa_yaW__linksContainerInner"><div class="products-wrapper styles-module__9d2Dpq__linksWrapper"><div><div class="products styles-module__9d2Dpq__linksContainer"><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-products-codecontrol" href="/platform/code-control/"><div class="styles-module__9d2Dpq__productLinkInner"><div class="styles-module__9d2Dpq__linkInnerIconContainer"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpUVqYofJOwHTu-_icon-main-nav--CodeControl.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpUVqYofJOwHTu-_icon-main-nav--CodeControl.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpUVqYofJOwHTu-_icon-main-nav--CodeControl.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><div class="styles-module__9d2Dpq__productLinkTextContainer"><h6>CodeControl</h6><p>Ship confidently, with automated control built in.</p></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-products-agentcontrol" href="/platform/agent-control/"><div class="styles-module__9d2Dpq__productLinkInner"><div class="styles-module__9d2Dpq__linkInnerIconContainer"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpUVaYofJOwHTu9_icon-main-nav--AgentControl.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpUVaYofJOwHTu9_icon-main-nav--AgentControl.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpUVaYofJOwHTu9_icon-main-nav--AgentControl.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><div class="styles-module__9d2Dpq__productLinkTextContainer"><h6>AgentControl</h6><p>One place to keep your agent behavior under control.</p></div></div></a></div></div><div class="styles-module__9d2Dpq__bookDemoCta"><a class="styles-module__d4f9cW__button styles-module__d4f9cW__variant_lime_outline styles-module__d4f9cW__size_default styles-module__9d2Dpq__bookDemoCtaLink" target="_self" tabindex="0" data-analytics="nav-products-book-a-demo" href="/request-a-demo/"><span class="styles-module__d4f9cW__label">Book a demo</span><span class="styles-module__d4f9cW__arrowBox false"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__d4f9cW__arrow" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></span></a></div></div><div class="overview-wrapper styles-module__9d2Dpq__linksWrapper"><div><p class="styles-module__9d2Dpq__categoryTitle">How it works</p><div class="overview styles-module__9d2Dpq__linksContainer"><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-overview-platform-overview" href="/how-it-works/platform/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agwNv6YofJOwHWkd_platform-overview-icon.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agwNv6YofJOwHWkd_platform-overview-icon.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agwNv6YofJOwHWkd_platform-overview-icon.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Platform overview</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-overview-feature-flags" href="/how-it-works/feature-flags/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpNAKYofJOwHTuE_icon-main-nav--FeatureManagement.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpNAKYofJOwHTuE_icon-main-nav--FeatureManagement.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpNAKYofJOwHTuE_icon-main-nav--FeatureManagement.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Feature flags</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-overview-observability" href="/how-it-works/observability/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpNA6YofJOwHTuH_icon-main-nav--Observability.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpNA6YofJOwHTuH_icon-main-nav--Observability.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpNA6YofJOwHTuH_icon-main-nav--Observability.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Observability</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-overview-experimentation" href="/how-it-works/experimentation/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpM_6YofJOwHTuD_icon-main-nav--Experimentation.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpM_6YofJOwHTuD_icon-main-nav--Experimentation.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpM_6YofJOwHTuD_icon-main-nav--Experimentation.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Experimentation</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-overview-agent-integrations" href="/how-it-works/agent-integrations/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpM_qYofJOwHTuC_icon-main-nav--Agentintegrations.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpM_qYofJOwHTuC_icon-main-nav--Agentintegrations.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpM_qYofJOwHTuC_icon-main-nav--Agentintegrations.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Agent integrations</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-overview-integrations" href="/integrations/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpNAqYofJOwHTuG_icon-main-nav--Integrations.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpNAqYofJOwHTuG_icon-main-nav--Integrations.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpNAqYofJOwHTuG_icon-main-nav--Integrations.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Integrations</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-overview-architecture" href="/how-it-works/platform-architecture/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpNAaYofJOwHTuF_icon-main-nav--Infrastructure.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpNAaYofJOwHTuF_icon-main-nav--Infrastructure.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpNAaYofJOwHTuF_icon-main-nav--Infrastructure.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Architecture</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div></div></div></div></div></div></div></div></div><div class="styles-module__wa_yaW__mainNavParent nav--main-nav-parent"><div class="moreStyles-module__udQsYq__parentNavItem styles-module__wa_yaW__parentNavItem main-nav-parent-nav-item"><div class="moreStyles-module__udQsYq__navItem styles-module__wa_yaW__navItem" id="solutions" data-analytics="nav-solutions" role="button" tabindex="0"><span class="moreStyles-module__udQsYq__navItemTitle styles-module__wa_yaW__navItemTitle main-nav-title">Solutions</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__wa_yaW__mobileCaretClosed "><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div><div class="
moreStyles-module__udQsYq__dropdown
main-nav-dropdown
solutions
styles-module__wa_yaW__dropdown
"><div class="moreStyles-module__udQsYq__dropdownContainer styles-module__wa_yaW__dropdownContainer main-nav-dropdown-container"><div class="moreStyles-module__udQsYq__linksContainer styles-module__wa_yaW__linksContainer"><div class="styles-module__wa_yaW__linksContainerInner"><div class="by-team-wrapper styles-module__9d2Dpq__linksWrapper"><div><p class="styles-module__9d2Dpq__categoryTitle">By Use Case</p><div class="by-team styles-module__9d2Dpq__linksContainer"><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-by-team-release-ai-built-code" href="/solutions/release-ai-built-code/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpOrqYofJOwHTuK_icon-main-nav--ReleaseAI-BuiltCode.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpOrqYofJOwHTuK_icon-main-nav--ReleaseAI-BuiltCode.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpOrqYofJOwHTuK_icon-main-nav--ReleaseAI-BuiltCode.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Release AI-built code</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-by-team-control-ai-agents" href="/solutions/control-ai-agents/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpOrKYofJOwHTuI_icon-main-nav--ControlAIAgents.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpOrKYofJOwHTuI_icon-main-nav--ControlAIAgents.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpOrKYofJOwHTuI_icon-main-nav--ControlAIAgents.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Control AI agents</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-by-team-optimize-ai-performance-cost" href="/solutions/optimize-ai-performance/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpOraYofJOwHTuJ_icon-main-nav--OptimizeAIPerformance%26Cost.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpOraYofJOwHTuJ_icon-main-nav--OptimizeAIPerformance%26Cost.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpOraYofJOwHTuJ_icon-main-nav--OptimizeAIPerformance%26Cost.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Optimize AI performance &amp; cost</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-by-team-self-heal-systems" href="/solutions/self-heal-systems/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpOsKYofJOwHTuM_icon-main-nav--Self-HealSystems.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpOsKYofJOwHTuM_icon-main-nav--Self-HealSystems.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpOsKYofJOwHTuM_icon-main-nav--Self-HealSystems.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Self-heal systems</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-by-team-run-experiments" href="/solutions/run-experiments/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpOr6YofJOwHTuL_icon-main-nav--RunExperiments.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpOr6YofJOwHTuL_icon-main-nav--RunExperiments.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpOr6YofJOwHTuL_icon-main-nav--RunExperiments.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Run experiments</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div></div></div><div class="by-industry-wrapper styles-module__9d2Dpq__linksWrapper"><div><p class="styles-module__9d2Dpq__categoryTitle">By Team</p><div class="by-industry styles-module__9d2Dpq__linksContainer"><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-by-industry-ai-engineers" href="/persona/ai-engineers/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpQmaYofJOwHTuS_icon-main-nav--AIEngineer.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpQmaYofJOwHTuS_icon-main-nav--AIEngineer.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpQmaYofJOwHTuS_icon-main-nav--AIEngineer.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>AI engineers</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-by-industry-developers" href="/persona/development-teams/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpQmqYofJOwHTuT_icon-main-nav--Developers.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpQmqYofJOwHTuT_icon-main-nav--Developers.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpQmqYofJOwHTuT_icon-main-nav--Developers.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Developers</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-by-industry-devops-sre" href="/persona/devops-site-reliability-engineer-teams/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpQm6YofJOwHTuU_icon-main-nav--DevOps-SRE.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpQm6YofJOwHTuU_icon-main-nav--DevOps-SRE.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpQm6YofJOwHTuU_icon-main-nav--DevOps-SRE.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>DevOps &amp; SRE</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-by-industry-product-managers" href="/persona/product-managers/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpQnaYofJOwHTuW_icon-main-nav--ProductManagers.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpQnaYofJOwHTuW_icon-main-nav--ProductManagers.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpQnaYofJOwHTuW_icon-main-nav--ProductManagers.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Product managers</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-by-industry-data-scientists" href="/persona/data-scientists/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/8Rpfg-gh7BMefouu_persona-data-scientist-icon-nav.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/8Rpfg-gh7BMefouu_persona-data-scientist-icon-nav.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/8Rpfg-gh7BMefouu_persona-data-scientist-icon-nav.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Data scientists</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div></div></div></div></div></div></div></div></div><div class="styles-module__wa_yaW__mainNavParent nav--main-nav-parent"><div class="moreStyles-module__udQsYq__parentNavItem styles-module__wa_yaW__parentNavItem main-nav-parent-nav-item"><div class="moreStyles-module__udQsYq__navItem styles-module__wa_yaW__navItem" id="resources" data-analytics="nav-resources" role="button" tabindex="0"><span class="moreStyles-module__udQsYq__navItemTitle styles-module__wa_yaW__navItemTitle main-nav-title">Resources</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__wa_yaW__mobileCaretClosed "><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div><div class="
moreStyles-module__udQsYq__dropdown
main-nav-dropdown
resources
styles-module__wa_yaW__dropdown
"><div class="moreStyles-module__udQsYq__dropdownContainer styles-module__wa_yaW__dropdownContainer main-nav-dropdown-container"><div class="moreStyles-module__udQsYq__linksContainer styles-module__wa_yaW__linksContainer"><div class="styles-module__wa_yaW__linksContainerInner"><div class="learn-wrapper styles-module__9d2Dpq__linksWrapper"><div><p class="styles-module__9d2Dpq__categoryTitle">Learn</p><div class="learn styles-module__9d2Dpq__linksContainer"><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-learn-blog" href="/blog/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSN6YofJOwHTud_icon-main-nav--Blog.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSN6YofJOwHTud_icon-main-nav--Blog.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSN6YofJOwHTud_icon-main-nav--Blog.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Blog</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-learn-guides-ebooks" href="/guides/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSOaYofJOwHTuf_icon-main-nav--GuidesandEbooks.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSOaYofJOwHTuf_icon-main-nav--GuidesandEbooks.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSOaYofJOwHTuf_icon-main-nav--GuidesandEbooks.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Guides &amp; ebooks</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-learn-events-webinars" href="/events-webinars/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSOKYofJOwHTue_icon-main-nav--EventsandWebinars.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSOKYofJOwHTue_icon-main-nav--EventsandWebinars.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSOKYofJOwHTue_icon-main-nav--EventsandWebinars.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Events &amp; webinars</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a href="https://www.youtube.com/@LaunchDarkly" class="styles-module__9d2Dpq__link " target="_blank" tabindex="0" data-analytics="nav-learn-videos" rel="nofollow noreferrer"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSOqYofJOwHTug_icon-main-nav--Videos.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSOqYofJOwHTug_icon-main-nav--Videos.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSOqYofJOwHTug_icon-main-nav--Videos.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Videos</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div></div></div><div class="success-wrapper styles-module__9d2Dpq__linksWrapper"><div><p class="styles-module__9d2Dpq__categoryTitle">Success</p><div class="success styles-module__9d2Dpq__linksContainer"><!--$?--><template id="B:0"></template><a href="https://academy.launchdarkly.com/" rel="nofollow noopener noreferrer" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-success-academy"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSQ6YofJOwHTui_icon-main-nav--Academy.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSQ6YofJOwHTui_icon-main-nav--Academy.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSQ6YofJOwHTui_icon-main-nav--Academy.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Academy</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><!--/$--><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-success-customer-stories" href="/customer-stories/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSRKYofJOwHTuj_icon-main-nav--CustomerStories.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSRKYofJOwHTuj_icon-main-nav--CustomerStories.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSRKYofJOwHTuj_icon-main-nav--CustomerStories.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Customer stories</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-success-professional-services" href="/services/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSRqYofJOwHTul_icon-main-nav--ProfessionalServices.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSRqYofJOwHTul_icon-main-nav--ProfessionalServices.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSRqYofJOwHTul_icon-main-nav--ProfessionalServices.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Professional services</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-success-partners" href="/partner-program/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSRaYofJOwHTuk_icon-main-nav--Partners.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSRaYofJOwHTuk_icon-main-nav--Partners.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSRaYofJOwHTuk_icon-main-nav--Partners.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Partners</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div></div></div><div class="get-help-wrapper styles-module__9d2Dpq__linksWrapper"><div><p class="styles-module__9d2Dpq__categoryTitle">Get Help</p><div class="get-help styles-module__9d2Dpq__linksContainer"><!--$?--><template id="B:1"></template><a href="https://support.launchdarkly.com/" rel="nofollow noopener noreferrer" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-get-help-help-center"><div class="styles-module__9d2Dpq__productLinkInner"><div class="styles-module__9d2Dpq__linkInnerIconContainer"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpTiKYofJOwHTu2_icon-main-nav--help-center.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpTiKYofJOwHTu2_icon-main-nav--help-center.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpTiKYofJOwHTu2_icon-main-nav--help-center.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><div class="styles-module__9d2Dpq__productLinkTextContainer"><h6>Help Center</h6><p>Explore help topics for everything LaunchDarkly.</p></div></div></a><!--/$--><!--$?--><template id="B:2"></template><a href="https://support.launchdarkly.com/hc/en-us/requests/new?ticket_form_id=360000836893" rel="nofollow noopener noreferrer" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-get-help-request-support"><div class="styles-module__9d2Dpq__productLinkInner"><div class="styles-module__9d2Dpq__linkInnerIconContainer"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpTiaYofJOwHTu3_icon-main-nav--request-support.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpTiaYofJOwHTu3_icon-main-nav--request-support.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpTiaYofJOwHTu3_icon-main-nav--request-support.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><div class="styles-module__9d2Dpq__productLinkTextContainer"><h6>Request support</h6><p>Reach out to us for direct answers to your questions.</p></div></div></a><!--/$--></div></div></div></div></div></div></div></div></div><div class="styles-module__wa_yaW__mainNavParent nav--main-nav-parent"><div class="moreStyles-module__udQsYq__parentNavItem styles-module__wa_yaW__parentNavItem main-nav-parent-nav-item"><div class="moreStyles-module__udQsYq__navItem styles-module__wa_yaW__navItem" id="developers" data-analytics="nav-developers" role="button" tabindex="0"><span class="moreStyles-module__udQsYq__navItemTitle styles-module__wa_yaW__navItemTitle main-nav-title">Developers</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__wa_yaW__mobileCaretClosed "><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div><div class="
moreStyles-module__udQsYq__dropdown
main-nav-dropdown
developers
styles-module__wa_yaW__dropdown
"><div class="moreStyles-module__udQsYq__dropdownContainer styles-module__wa_yaW__dropdownContainer main-nav-dropdown-container"><div class="moreStyles-module__udQsYq__linksContainer styles-module__wa_yaW__linksContainer"><div class="styles-module__wa_yaW__linksContainerInner"><div class="resources-wrapper styles-module__9d2Dpq__linksWrapper"><div><p class="styles-module__9d2Dpq__categoryTitle">Docs</p><div class="resources styles-module__9d2Dpq__linksContainer"><!--$?--><template id="B:3"></template><a href="https://launchdarkly.com/docs/home" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-resources-docs-home"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSVKYofJOwHTuo_icon-main-nav--DocsHome.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSVKYofJOwHTuo_icon-main-nav--DocsHome.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSVKYofJOwHTuo_icon-main-nav--DocsHome.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Docs home</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><!--/$--><!--$?--><template id="B:4"></template><a href="https://launchdarkly.com/docs/home/getting-started" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-resources-feature-flags-quickstart"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSVaYofJOwHTup_icon-main-nav--FeatureFlagQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSVaYofJOwHTup_icon-main-nav--FeatureFlagQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSVaYofJOwHTup_icon-main-nav--FeatureFlagQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Feature flags Quickstart</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><!--/$--><!--$?--><template id="B:5"></template><a href="https://launchdarkly.com/docs/home/agentcontrol/quickstart" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-resources-agentcontrol-quickstart"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSUqYofJOwHTum_icon-main-nav--AIConfigsQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSUqYofJOwHTum_icon-main-nav--AIConfigsQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSUqYofJOwHTum_icon-main-nav--AIConfigsQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>AgentControl Quickstart</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><!--/$--><!--$?--><template id="B:6"></template><a href="https://launchdarkly.com/docs/api/" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-resources-api-docs"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSU6YofJOwHTun_icon-main-nav--APIDocs.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSU6YofJOwHTun_icon-main-nav--APIDocs.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSU6YofJOwHTun_icon-main-nav--APIDocs.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>API docs</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><!--/$--></div></div></div><div class="workflow-wrapper styles-module__9d2Dpq__linksWrapper"><div><p class="styles-module__9d2Dpq__categoryTitle">Resources</p><div class="workflow styles-module__9d2Dpq__linksContainer"><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-workflow-product-updates" href="/changelog/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSZqYofJOwHTut_icon-main-nav--Productupdates.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSZqYofJOwHTut_icon-main-nav--Productupdates.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSZqYofJOwHTut_icon-main-nav--Productupdates.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Product Updates</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-workflow-power-analysis-calculator" href="/sample-size-calculator/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSZaYofJOwHTus_icon-main-nav--PowerAnalysisCalculator.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSZaYofJOwHTus_icon-main-nav--PowerAnalysisCalculator.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSZaYofJOwHTus_icon-main-nav--PowerAnalysisCalculator.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Power analysis calculator</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><!--$?--><template id="B:7"></template><a href="https://launchdarkly.com/docs/blog" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-workflow-flagship-engineering-blog"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSZKYofJOwHTur_icon-main-nav--FlagshipEngineeringBlog.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSZKYofJOwHTur_icon-main-nav--FlagshipEngineeringBlog.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSZKYofJOwHTur_icon-main-nav--FlagshipEngineeringBlog.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Flagship engineering blog</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a><!--/$--><a class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-workflow-community" href="/community/"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSY6YofJOwHTuq_icon-main-nav--Community.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSY6YofJOwHTuq_icon-main-nav--Community.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSY6YofJOwHTuq_icon-main-nav--Community.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Community</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div></div></div></div><div id="developers-dropdown-cta" class="styles-module__SAuuzq__ctaWrapper"><!--$?--><template id="B:8"></template><a href="https://app.launchdarkly.com/signup" rel="nofollow noopener noreferrer" class="styles-module__SAuuzq__ctaInner js-primary-button-hover-parent" target="_self" tabindex="0" data-analytics="nav-developers-free-trial"><div class="styles-module__SAuuzq__ctaIconContainer"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover"><img alt="" loading="lazy" width="72" height="72" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="/_next/image/?url=%2Fimages%2Fai-refresh%2Fnav%2Ftoggle-cta-nav.png&amp;w=96&amp;q=75 1x, /_next/image/?url=%2Fimages%2Fai-refresh%2Fnav%2Ftoggle-cta-nav.png&amp;w=256&amp;q=75 2x" src="/_next/image/?url=%2Fimages%2Fai-refresh%2Fnav%2Ftoggle-cta-nav.png&amp;w=256&amp;q=75"/></div></div><div class="styles-module__SAuuzq__ctaTextContainer"><p class="styles-module__SAuuzq__ctaTitle">Take control of your code and agents at runtime.</p><p>Control releases, experiments, and AI behavior in prod.</p></div><div class="styles-module__SAuuzq__ctaButton"><span class="styles-module__d4f9cW__button styles-module__d4f9cW__variant_lime styles-module__d4f9cW__size_default"><span class="styles-module__d4f9cW__label">Free trial</span><span class="styles-module__d4f9cW__arrowBox false"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__d4f9cW__arrow" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></span></span></div></a><!--/$--></div></div></div></div></div></div><div class="styles-module__stVVvG__pricingWrapper"><div><a class="styles-module__stVVvG__pricingLink styles-module__stVVvG__mobilePricingLink" target="_self" tabindex="0" data-analytics="nav-pricing" href="/pricing/"><span>Pricing</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__stVVvG__mobilePricingArrow"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></a></div></div><div class="styles-module__stVVvG__pricingWrapper"><div><!--$?--><template id="B:9"></template><a href="https://app.launchdarkly.com/" rel="nofollow noopener noreferrer" class="styles-module__stVVvG__pricingLink styles-module__stVVvG__mobileSignInLink" target="_self" tabindex="0" data-analytics="nav-mobile-sign-in"><span>Sign in</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__stVVvG__mobilePricingArrow"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></a><!--/$--></div></div><div class="styles-module__stVVvG__mobileBookDemoWrapper"><div><a class="styles-module__stVVvG__mobileBookDemoLink" target="_self" tabindex="0" data-analytics="nav-mobile-book-a-demo" href="/request-a-demo/"><span>Book a demo</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__stVVvG__mobilePricingArrow"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></a></div></div></nav></div></div><div class="oldstyles-module__hgjkrG__mainNavExtra main-nav-extra styles-module__stVVvG__demoRequestButton "><div class="oldstyles-module__hgjkrG__signIn styles-module__stVVvG__signIn"><a class="styles-module__d4f9cW__button styles-module__d4f9cW__variant_lime styles-module__d4f9cW__size_default oldstyles-module__hgjkrG__requestDemoButton styles-module__stVVvG__requestDemoButton" target="_self" tabindex="0" data-analytics="nav-book-a-demo" href="/request-a-demo/"><span class="styles-module__d4f9cW__label">Book a demo</span><span class="styles-module__d4f9cW__arrowBox false"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__d4f9cW__arrow" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></span></a></div></div></nav></header><div class="styles-module__stVVvG__mainNavOverlay main-nav-overlay"></div><div class="styles-module__ZkjjmG__body styles-module__ZkjjmG__isRefreshDesign"><main class="styles-module__ZkjjmG__main "><section class="styles-module__NFwUga__newSection styles-module__NFwUga__bgLight"><div class="styles-module__NFwUga__contentContainer "><div class="styles-module__xmAU9a__headerBreadcrumbSearchBar styles-module__xmAU9a__noTopPadding"><div class="styles-module__xmAU9a__container"><div class="styles-module__xmAU9a__breadcrumbs"><a target="_self" tabindex="0" href="/blog/">Blog</a><img class="styles-module__xmAU9a__breadcrumbArrow" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/Z5UufJbqstJ992SK_right-arrow-padded.svg" alt="Right arrow" loading="lazy"/><a target="_self" tabindex="0" href="/blog/category/developer-productivity/">Developer productivity</a><div class="styles-module__xmAU9a__thirdBreadcrumb"><img class="styles-module__xmAU9a__breadcrumbArrow" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/Z5UufJbqstJ992SK_right-arrow-padded.svg" alt="Right arrow" loading="lazy"/><span class="styles-module__xmAU9a__titleBreadcrumb">Testing in production to stay safe and sensible</span></div></div><div class="styles-module__xmAU9a__barWrapper"><div class="styles-module__xmAU9a__barContainer"><div class="styles-module__xmAU9a__searchBarContainer "><div class="styles-module__xmAU9a__searchBar "><input type="text" placeholder="Search blog" aria-label="Search" value=""/><div class="styles-module__xmAU9a__backspaceIcon styles-module__xmAU9a__hidden"><button type="button" aria-label="Clear search" class="styles-module__xmAU9a__disabled" style="all:unset;cursor:pointer"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/Z5WVkpbqstJ992cY_backspace-icon-blue.svg" alt="" loading="lazy"/></button></div><div class="styles-module__xmAU9a__icon"><img class="styles-module__xmAU9a__search" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/Z5V7fZbqstJ992aX_search-icon-blue.svg" alt="Search icon" loading="lazy"/><img class="styles-module__xmAU9a__close" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/Z5WFMpbqstJ992ai_close-icon.svg" alt="Close icon" loading="lazy"/></div></div></div></div></div></div></div><div class="styles-module__HXqOTa__blogContainer"><div class="styles-module__HXqOTa__header"><div class="styles-module__HXqOTa__content"><p class="styles-module__J0n02W__variant_textXsmallCaps styles-module__J0n02W__paragraph styles-module__J0n02W__color_gray04 styles-module__J0n02W__weight_medium">Mar 18, 2021</p><h1 class="styles-module__J0n02W__variant_h3 styles-module__J0n02W__weight_semibold styles-module__HXqOTa__blogTitle">Testing in production to stay safe and sensible</h1><p class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__paragraph styles-module__J0n02W__color_gray04 styles-module__J0n02W__weight_regular styles-module__HXqOTa__excerpt">“Testing in production” refers to the practice of running code on production servers, using real data from real users, without showing the new behavior to the majority of users. These tests are frequently run during the final stages before releasing the software to a broad audience.</p><div class="styles-module__HXqOTa__authorContainer"><div class="styles-module__5zAopa__author "><a class="styles-module__5zAopa__authorImage" target="_self" tabindex="0" href="/blog/author/heidiw/"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image post-details-author-image"><img alt="" loading="lazy" width="2000" height="2000" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/8178e2d3-a1ff-45d5-8015-83c93e3ad4df__HeidiWaterhouse_Preferred.png?auto=compress%2Cformat&amp;rect=0%2C0%2C1200%2C1200&amp;w=2048&amp;fit=max&amp;q=80 1x, https://images.prismic.io/launchdarkly/8178e2d3-a1ff-45d5-8015-83c93e3ad4df__HeidiWaterhouse_Preferred.png?auto=compress%2Cformat&amp;rect=0%2C0%2C1200%2C1200&amp;w=3840&amp;fit=max&amp;q=80 2x" src="https://images.prismic.io/launchdarkly/8178e2d3-a1ff-45d5-8015-83c93e3ad4df__HeidiWaterhouse_Preferred.png?auto=compress%2Cformat&amp;rect=0%2C0%2C1200%2C1200&amp;w=3840&amp;fit=max&amp;q=80"/></div></a><div class="styles-module__5zAopa__authorDetails"><a class="styles-module__5zAopa__authorName" target="_self" tabindex="0" href="/blog/author/heidiw/">Heidi Waterhouse</a><div class="styles-module__5zAopa__authorJobTitle">LaunchDarkly</div></div></div></div></div><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image styles-module__HXqOTa__featuredImage"><img alt="" loading="eager" width="2000" height="1126" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/0e9e30d7-d680-443e-a070-2533f2e5e942_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress%2Cformat&amp;rect=0%2C0%2C4000%2C2252&amp;w=2048&amp;fit=max&amp;q=80 1x, https://images.prismic.io/launchdarkly/0e9e30d7-d680-443e-a070-2533f2e5e942_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress%2Cformat&amp;rect=0%2C0%2C4000%2C2252&amp;w=3840&amp;fit=max&amp;q=80 2x" src="https://images.prismic.io/launchdarkly/0e9e30d7-d680-443e-a070-2533f2e5e942_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress%2Cformat&amp;rect=0%2C0%2C4000%2C2252&amp;w=3840&amp;fit=max&amp;q=80"/></div></div><div class="styles-module__HXqOTa__staticBar"><div id="blog-progress-bar" class="styles-module__lQ92Cq__container"><div class="styles-module__lQ92Cq__progress" style="width:0%"></div></div></div><div class="styles-module__HXqOTa__blogMainContainer"><div class="styles-module__HXqOTa__body"><div class="styles-module__HXqOTa__blogContentWrapper"><article class="blog-post-main-content"><div data-ld-slice-index="0" data-ld-slice-type="wysiwyg"><div class="wysiwyg styles-module__yVDX7W__wysiwyg "><section class="style-module__REJINa__section style-module__REJINa__spacing_bottom_xl style-module__REJINa__spacing_top_xl section"><div class="wysiwyg-content"><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">“Testing in production” refers to the practice of running code on production servers, using real data from real users, without showing the new behavior to the majority of users. These tests are frequently run during the final stages before releasing the software to a broad audience.</p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Everyone is testing in production, some organizations admit and plan for it.</p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Testing in production is not a substitute for quality assurance (QA), or a shortcut to eliminating unit testing or integration testing. Instead, it is an extension of testing and QA control points into the most realistic environment possible—the real-world.</p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Testing in production has two implementations. In the first, the test exists to prove or disprove a stated hypothesis—“If we make this change, customers will convert at least 10% more often”. The second is to make sure that the change doesn’t cause negative changes for the customers or environment—“If we make this change, checkout won’t be affected”.</p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Although we use the phrase “test in production” for both implementations, it’s useful to understand what your organization is trying to achieve.</p><h2 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_heading styles-module__5zGs1G__size_xs styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Does production testing replace other testing?</h2><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">No, testing in production is not a replacement for other types of testing and is not a way to eliminate your QA team. Your staging environment will not 100% match your production environment. While there are many types of tests that you should run in test environments prior to deploying code, to get accurate data you need to test in production. </p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Your test suite should include the following types of tests in a pre-production environment before releasing new features:</p><ul class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md"><li class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_sm"><strong>Unit tests</strong> to check the smallest unit of code that can be logically isolated. </li><li class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_sm"><strong>Integration tests</strong> to test software dependencies and the combination of various software modules.  </li><li class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_sm"><strong>Performance testing</strong> which includes load tests and stress tests to identify how a system or software behaves when there are spikes in production traffic. </li><li class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_sm"><strong>Regression tests</strong> to confirm previous functionality continues to operate as expected. </li><li class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_sm"><strong>Functional tests </strong>to confirm the feature performs or functions as expected. </li><li class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_sm"><strong>Lint tests </strong>to check your source code for programmatic or stylistic errors. </li><li class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_sm"><strong>Usability tests </strong>to validate the ease of use with end-users. <br/></li></ul><h2 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_heading styles-module__5zGs1G__size_xs styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Ways to test in production </h2><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Many types of tests can be classified as testing in production. <a href="https://copyconstruct.medium.com/testing-in-production-the-safe-way-18ca102d0ef1" target="_blank" tabindex="0" rel="nofollow noreferrer">Cindy Sridharan</a> describes three phases of production—deploy, release, and post-release. Tests taking place in any of these phases can be considered testing in production. </p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">You may choose to rerun some tests that you conducted in staging or pre-production in your production environment such as integration tests or load tests during the deploy phase. You may not be able to fully run all integration tests in staging based on the configuration of your environment. Verify the results of integration tests in production. Some companies also choose to perform load testing in a production environment prior to deployment as the staging environment might not be of the same scale as production.  </p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">During the release phase, you may opt to use a blue-green deployment or a <a target="_self" tabindex="0" href="/blog/what-is-a-canary-release/">canary release</a>. Both of these can be considered testing in production. </p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">A<a target="_self" tabindex="0" href="/blog/blue-green-deployments-a-definition-and-introductory/"> blue-green deployment </a>requires creating two identical instances of a production application. At any given time, one app is receiving user traffic, while the other app receives constant updates from a continuous integration (CI) server. At any time, the system not receiving traffic could become the production environment, hence the testing you are conducting on the inactive application is a production environment. </p><p class="block-img"><img src="https://prismic-io.s3.amazonaws.com/launchdarkly/0f0cf3b4-9f25-43fe-bdb8-3442b04f8c08_Test+in+production+.png"/></p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md"><em>A blue-green deployment</em></p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md"><a target="_self" tabindex="0" href="/blog/what-is-canary-testing-a-detailed-explanation/">Canary testing</a> is the process of testing out new features or software versions with a percentage of real users in a production environment. With a canary test, only some users are seeing a new feature or version of the application, but they are seeing it in the production environment. Canary tests are a form of testing in production. </p><p class="block-img"><img src="https://prismic-io.s3.amazonaws.com/launchdarkly/945b0bd7-318e-4d5a-8320-475d49172d85_Release+progressions.png"/></p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md"><em>Canary test using feature flags</em></p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Testing in production that may occur during the post-release phase includes chaos engineering also known as game days. With chaos engineering, you are proactively looking for how systems and applications respond to stress and failures. Identifying how systems break under certain scenarios can test your hypothesis and prepare you to better address incidents when things break. </p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Another form of testing in production that occurs during the release and post-release phases is <a target="_self" tabindex="0" href="/blog/nine-experimentation-best-practices/">experimentation</a>. Experiments are sometimes referred to as a/b tests or a/b/n tests. <a target="_self" tabindex="0" href="/how-it-works/experimentation/">Experiments</a> allow you to gather data from end-users to fine-tune a feature before releasing to all users. With a/b testing, you can collect user data on conversions, performance, or other metrics to determine which version has the most impact on the business.</p><h2 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_heading styles-module__5zGs1G__size_xs styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">The advantages of testing in production</h2><h3 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Accuracy</h3><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">The purpose of testing in a real environment is to ensure that your test results are accurate. You don’t want to go forward with a change in false confidence. The data in your <a target="_self" tabindex="0" href="/blog/test-environments-101-definition-types-and-best/">test environment</a> is often not an exact replica of production data. Different data can impact the accuracy of your tests. Testing your change against real users in the best way to be sure that you have covered edge cases. Target to exactly your demographic. </p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">It’s difficult to create synthetic users that have the full range of organic users. If you are trying to understand what effect a change will have on a subset of your users, the best way to find out is to deliver it exactly to them.</p><h3 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Limit the blast radius</h3><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Delivering a change and testing it with only a subset of users means that if something does go wrong, you have not affected the whole user base, only those that you are testing on, and feature flags mean that you can rollback any negative changes immediately, without needing to deploy anything different.</p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">When you gradually roll out new code you can prevent bad deployments from breaking production systems and negatively impacting the user experience. </p><h3 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Collect feedback</h3><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Collect feedback from monitoring and observability tooling on production systems to understand the success or failure rate of a new feature. Ensure application performance does not shift from an expected baseline in real-time. </p><h3 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Eat your own dogfood</h3><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Just like a chef tastes their sauces, as people making software, we need to frequently sample the experience of using our software before we share it with others. Being able to turn on a feature that you’re working on just for yourself gives you a lot of immediate feedback on whether the change is positive or negative.</p><h3 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Savings</h3><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Two savings areas related to testing in production were revealed in the  <!--$--><a href="https://learn.launchdarkly.com/total-economic-impact/#lp-pom-block-8" rel="nofollow noopener noreferrer" target="_self" tabindex="0">Total Economic Impact of LaunchDarkly</a><!--/$--> study. First, when you can segment your production infrastructure to do testing, you need less of a duplicate infrastructure for dedicated testing. “Software testing processes often require running user testing in a staging environment that closely replicates production, and this is very expensive to build and maintain.” Reducing the size and scope of the stage environment cuts down on overhead, increases deployment velocities, and lowers costs.</p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Second, developers spend less time solving integration issues. Features have already been tested in production and integration and code errors can be resolved prior to launch. In addition to the cost-savings and boost to developer productivity, developers may also experience less stress and anxiety around resolving incidents after a build is deployed. </p></div></section></div></div><div data-ld-slice-index="1" data-ld-slice-type="blog_cta"></div><div data-ld-slice-index="2" data-ld-slice-type="wysiwyg"><div class="wysiwyg styles-module__yVDX7W__wysiwyg "><section class="style-module__REJINa__section style-module__REJINa__spacing_bottom_xl style-module__REJINa__spacing_top_xl section"><div class="wysiwyg-content"><h3 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Weirdness</h3><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Users are weird in unique and unpredictable ways that are difficult to test for. What happens if someone names an object with an emoji, or runs a three-year-old unpatched browser? You don’t want to write test cases for these odd scenarios. You need to test these in production.  </p><h2 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_heading styles-module__5zGs1G__size_xs styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">What can go wrong with testing in production?</h2><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">People are wary of testing in production because even if you follow all the best practices and have safety mechanisms in place, things can go wrong. What can go wrong, even if you have followed best practices?</p><ul class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md"><li class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_sm">Wider or narrower distribution than intended</li><li class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_sm">Unforeseen interactions or impacts on other production systems</li><li class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_sm">Runaway processes</li><li class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_sm">Pages and alerts to people on-call</li></ul><h2 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_heading styles-module__5zGs1G__size_xs styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">How do feature flags make production testing safer?</h2><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Everything we put into production carries some danger of negative effects for our users, but planning for that and mitigating it makes it much safer than believing everything will work perfectly.</p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Yes, production testing can be risky, but you can minimize your risk in two ways. First, take advantage of test automation, don’t bypass running tests in staging because you will be testing in production. (Yes, we mentioned this earlier but it bears repeating). Second, ensure you have the right processes in place to support testing in production, including the use of feature flags.</p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">A <a target="_self" tabindex="0" href="/blog/what-are-feature-flags/">feature flag</a>, or feature toggle, is a software development process used to enable or disable functionality without deploying code. You can wrap a feature in a flag to deploy them to production without making them visible to all users. Once the flag is in production you can give test engineers or software engineers access to run tests or experiments. Feature flags are a critical element to safely testing in production. </p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Here’s how feature flags can help to mitigate risks when testing in production. </p><h3 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Small bets</h3><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md"><a target="_self" tabindex="0" href="/blog/no-one-loses-1000-playing-penny-slots/">Smaller changes</a> are easier to undo, and testing a feature with a small group of users enables you to take risks you wouldn’t want to take with all of your users. Share new features with trusted, low-risk customers first to see if you’re headed in the right direction and to identify any “weirdness” that may exist in a live environment. </p><h3 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Easy to reverse course</h3><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">A feature flag allows you to immediately reverse any change that is going poorly. Turn the feature off completely, or leave it on for developers and engineers only. When features are wrapped in a flag, you don’t need to redeploy code to revert back to a previous version. With the flip of a flag, the feature is no longer visible to end-users. </p><h3 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Progressive Delivery</h3><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">The idea of slowly rolling out a feature and using observability data to determine if things are running smoothly are two core tenets of <a target="_self" tabindex="0" href="/blog/what-is-progressive-delivery-all-about/">Progressive Delivery</a>. With Progressive Delivery, you can deploy code changes on a daily basis and alter design and development decisions early on in the process. </p><p class="block-img"><img src="https://images.prismic.io/launchdarkly/9679ba40-a513-4cf2-9099-c307cad8f380_Release+progressions+2.png?auto=compress,format"/></p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md"><em>Using feature flags to progressively deliver new features to users based on region (geolocation)</em></p><h2 class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_heading styles-module__5zGs1G__size_xs styles-module__5zGs1G__weight_medium styles-module__5zGs1G__spacing_bottom_xl">Test in production at scale with LaunchDarkly</h2><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md"><a target="_self" tabindex="0" href="/how-it-works/platform/">LaunchDarky’s feature management platform</a> gives teams a seamless, low-risk way to test software changes in production at a high frequency and on a large scale. Feature management is a new class of software tools and processes anchored in the use of feature flags. It is also a key enabler of Progressive Delivery. With LaunchDarkly, software teams can quickly create, see, and manage feature flags when testing code changes in a production environment. </p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">What&#x27;s more, <a target="_self" tabindex="0" href="/features/code-references/">Code References</a> in LaunchDarkly simplify the process of scrubbing outdated flags from your codebase. LaunchDarkly also <a target="_self" tabindex="0" href="/integrations/">integrates</a> with observability and application performance monitoring (APM) tools, further reducing the risk of testing in production. When system performance issues register in your APM tool, you can go into LaunchDarkly and rapidly find and disable (i.e., hit a kill switch) the feature causing the incident. Or with <a target="_self" tabindex="0" href="/blog/launched-automatic-kill-switches-using-flag-triggers/">Flag Triggers</a> in LaunchDarkly, the offending feature will get disabled automatically. All told, LaunchDarkly is the ideal solution for testing in production.</p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Teams at companies like IBM, <a target="_self" tabindex="0" href="/case-studies/truecar/">TrueCar</a>, and <a target="_self" tabindex="0" href="/case-studies/oreilly/">O’Reilly Media</a> leverage LaunchDarkly for testing in production and have enjoyed safe, unceremonious releases as a result.</p></div></section></div></div><div data-ld-slice-index="3" data-ld-slice-type="breakout_quote"><section class="style-module__REJINa__section style-module__REJINa__spacing_bottom_none style-module__REJINa__spacing_top_none styles-module__ejongW__breakoutQuote"><figure class="styles-module__n0QSmq__quoteFigure"><svg class="styles-module__n0QSmq__badge" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72" fill="none" aria-hidden="true"><rect width="72" height="72" rx="8" fill="currentColor"></rect><path d="M60 33V39.2124H58.099C56.5677 39.2124 55.3531 39.4513 54.4554 39.9292C53.5578 40.4071 52.8977 41.2301 52.4752 42.3982C52.0528 43.5133 51.8416 45.0266 51.8416 46.9381V52.8319L49.5446 48.3717C49.9142 48.1062 50.4422 47.8938 51.1287 47.7345C51.8152 47.5221 52.5281 47.4159 53.2673 47.4159C55.0099 47.4159 56.462 47.9735 57.6238 49.0885C58.7855 50.1504 59.3663 51.6372 59.3663 53.5487C59.3663 55.354 58.8119 56.8938 57.703 58.1681C56.5941 59.3894 55.0099 60 52.9505 60C51.6304 60 50.3894 59.708 49.2277 59.1239C48.1188 58.4867 47.2211 57.4248 46.5347 55.9381C45.8482 54.3982 45.5049 52.3009 45.5049 49.646V48.292C45.5049 44.5221 46.0066 41.5221 47.0099 39.292C48.066 37.0619 49.571 35.469 51.5248 34.5133C53.4785 33.5044 55.8548 33 58.6535 33H60ZM42.495 33V39.2124H40.5941C39.0627 39.2124 37.8482 39.4513 36.9505 39.9292C36.0528 40.4071 35.3927 41.2301 34.9703 42.3982C34.5479 43.5133 34.3366 45.0266 34.3366 46.9381V52.8319L32.0396 48.3717C32.4092 48.1062 32.9373 47.8938 33.6238 47.7345C34.3102 47.5221 35.0231 47.4159 35.7624 47.4159C37.505 47.4159 38.9571 47.9735 40.1188 49.0885C41.2805 50.1504 41.8614 51.6372 41.8614 53.5487C41.8614 55.354 41.3069 56.8938 40.198 58.1681C39.0891 59.3894 37.505 60 35.4455 60C34.1254 60 32.8845 59.708 31.7228 59.1239C30.6139 58.4867 29.7162 57.4248 29.0297 55.9381C28.3432 54.3982 28 52.3009 28 49.646V48.292C28 44.5221 28.5017 41.5221 29.505 39.292C30.5611 37.0619 32.066 35.469 34.0198 34.5133C35.9736 33.5044 38.3498 33 41.1485 33H42.495Z" fill="#F8F8F8"></path></svg><div class="styles-module__n0QSmq__body"><blockquote class="styles-module__n0QSmq__content styles-module__n0QSmq__injectQuotes"><div><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">[Our engineers] can test features in production well in advance of a marketing launch. And if a feature causes problems on the day of the launch, we can just turn it off with a kill switch—no rollbacks. LaunchDarkly makes our releases boring. That’s exactly what we want.</p></div></blockquote><figcaption class="styles-module__n0QSmq__attribution">Chris Guidry, VP of Engineering, O&#x27;Reilly Media</figcaption></div></figure></section></div><div data-ld-slice-index="4" data-ld-slice-type="youtube_video"><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--></div><div data-ld-slice-index="5" data-ld-slice-type="youtube_video"><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--></div><div data-ld-slice-index="6" data-ld-slice-type="wysiwyg"><div class="wysiwyg styles-module__yVDX7W__wysiwyg "><section class="style-module__REJINa__section style-module__REJINa__spacing_bottom_xl style-module__REJINa__spacing_top_xl section"><div class="wysiwyg-content"><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">Testing in production isn&#x27;t just for companies the size of Amazon, Google, or Netflix; anybody can test in production. You&#x27;re likely testing in production today, you just don&#x27;t know it.</p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md">* * * </p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md"><strong><a target="_self" tabindex="0" href="/request-a-demo/">Request a demo</a> of LaunchDarkly’s feature management platform. And don’t miss our <a href="https://www.meetup.com/Test-in-Production/" target="_blank" tabindex="0" rel="nofollow noreferrer">Test in Production Meetup</a> (virtual, for now)!</strong></p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md"></p></div></section></div></div><div class="styles-module__HXqOTa__mobileCta"><h5 class="styles-module__HXqOTa__footerTitle">Like what you read?</h5></div></article></div></div><section class="styles-module__o_kpTq__sidebar"><div class="styles-module__o_kpTq__sidebarNewsletter"><div class="styles-module__yaWGhq__sidebarVersion undefined styles-module__yaWGhq__blogNewsletter "><div class="styles-module__yaWGhq__blogNewsletterSection"><div class="styles-module__yaWGhq__textContent"><img class="styles-module__yaWGhq__newsletterIcon" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aimOzgeQX7-eXLr4_icon-bw--notification.svg" alt="Notification icon" loading="lazy"/><h5 class="styles-module__J0n02W__variant_h5 styles-module__J0n02W__weight_medium">Sign up for our newsletter</h5></div><div class="styles-module__yaWGhq__customForm" id="customNewsletterForm"><div class="styles-module__yaWGhq__formElements" id="customNewsletterFormElements"><input id="customNewsletterEmail" type="email" placeholder="Email address" aria-label="Email address" name="email" value=""/><button class="styles-module__d4f9cW__button styles-module__d4f9cW__variant_dark styles-module__d4f9cW__size_default styles-module__yaWGhq__subscribeButton" type="button"><span class="styles-module__d4f9cW__label">Subscribe</span><span class="styles-module__d4f9cW__arrowBox false"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__d4f9cW__arrow" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></span></button><div class="styles-module__WD-Msa__tos sidebar-version-form-tos styles-module__yaWGhq__formTos styles-module__yaWGhq__sidebarVersionFormTos"><p>By supplying my contact information, I authorize LaunchDarkly to contact me with personalized marketing communications about our products and services. See our<!-- --> <a href="https://launchdarkly.com/policies/privacy/">Privacy Policy</a> for more details, or<!-- --> <a href="https://go.launchdarkly.com/UnsubscribePage.html">Opt-Out</a> at any time.</p></div></div><div class="styles-module__yaWGhq__successMessage" id="customNewsletterSuccessMessage"></div></div></div></div></div><div class="styles-module__o_kpTq__shareLinks"><div class="styles-module__o_kpTq__shareContainer"><div class="styles-module__0R691q__showIcons"><div class="styles-module__0R691q__links"><a class="styles-module__0R691q__link" href="https://twitter.com/intent/tweet?url=https://launchdarkly.com/blog/testing-in-production-for-safety-and-sanity/&amp;text=Testing in production to stay safe and sensible" target="__blank"><div class="styles-module__0R691q__linkIcon"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/6f9be1a5-6395-4b01-8719-ad43eea49d74_x-icon.svg" alt="Twitter" loading="lazy"/></div></a><a class="styles-module__0R691q__link" href="https://www.facebook.com/sharer/sharer.php?u=https://launchdarkly.com/blog/testing-in-production-for-safety-and-sanity/" target="__blank"><div class="styles-module__0R691q__linkIcon"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/b4f60d7a-48fa-40d5-a192-20fdd835ed40_Facebook.svg" alt="Facebook" loading="lazy"/></div></a><a class="styles-module__0R691q__link" href="https://www.linkedin.com/shareArticle?mini=true&amp;url=https://launchdarkly.com/blog/testing-in-production-for-safety-and-sanity/&amp;title=Testing in production to stay safe and sensible" target="__blank"><div class="styles-module__0R691q__linkIcon"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/45da01c6-71bd-4533-ae9c-6976ebbc9506_Component+4.svg" alt="LinkedIn" loading="lazy"/></div></a><a class="styles-module__0R691q__link" href="#" target="__blank"><div class="styles-module__0R691q__linkIcon"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/b9eae970-9f92-463c-983e-b44918749711_Link.svg" alt="Copy Link" loading="lazy"/></div><div class="styles-module__0R691q__linkClicked ">URL Copied!</div></a></div></div></div></div></section></div><div class="styles-module__HXqOTa__relatedContent"><div class="styles-module__z7oeYG__overflowCardCarousel styles-module__z7oeYG__darkTheme styles-module__z7oeYG__noFlexOnSplide "><div class="styles-module__z7oeYG__header"><div class="styles-module__z7oeYG__titleWithLink"><h3 class="styles-module__J0n02W__variant_h3 styles-module__J0n02W__weight_semibold">Related Content</h3><a class="styles-module__d4f9cW__button styles-module__d4f9cW__variant_outline styles-module__d4f9cW__size_default" target="_self" tabindex="0" href="/blog/category/developer-productivity/"><span class="styles-module__d4f9cW__label">See all posts on developer productivity</span><span class="styles-module__d4f9cW__arrowBox false"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__d4f9cW__arrow" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></span></a></div><div class="styles-module__z7oeYG__arrows"><div class="styles-module__z7oeYG__prev styles-module__z7oeYG__disabled"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div><div class="styles-module__z7oeYG__next "><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></div><div class="styles-module__z7oeYG__carouselContainer"><div class="styles-module__z7oeYG__spillContainer"><div class="splide"><div class="splide__track"><ul class="splide__list"><li class="splide__slide"><div class="styles-module__P4S5fa__wrapper styles-module__P4S5fa__dark styles-module__P4S5fa__isNewBlogStyle"><a class="styles-module__P4S5fa__imageWrapper" target="_self" tabindex="0" href="/request-a-demo/"><span class="styles-module__P4S5fa__image"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/ImBV-BjBTpyNYQTc_Blog_Getademo.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920&amp;q=80 1x, https://images.prismic.io/launchdarkly/ImBV-BjBTpyNYQTc_Blog_Getademo.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840&amp;q=80 2x" src="https://images.prismic.io/launchdarkly/ImBV-BjBTpyNYQTc_Blog_Getademo.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840&amp;q=80"/></div></span></a><div class="styles-module__P4S5fa__contentContainer "><div class="styles-module__P4S5fa__categoryEyebrow"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_eyebrow">Request a demo</span></div><a class="styles-module__P4S5fa__title" target="_self" tabindex="0" href="/request-a-demo/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium">Get started with a demo of LaunchDarkly</span></a></div></div></li><li class="splide__slide"><div class="styles-module__P4S5fa__wrapper styles-module__P4S5fa__dark styles-module__P4S5fa__isNewBlogStyle"><a class="styles-module__P4S5fa__imageWrapper" target="_self" tabindex="0" href="/blog/release-management-checklist/"><span class="styles-module__P4S5fa__image"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image"><img alt="An illustration demonstrating feature management." loading="lazy" width="2151" height="1200" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/Z1JIWpbqstJ98GFS_Evergeen-featuremanagement.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840&amp;q=80 1x" src="https://images.prismic.io/launchdarkly/Z1JIWpbqstJ98GFS_Evergeen-featuremanagement.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840&amp;q=80"/></div></span></a><div class="styles-module__P4S5fa__contentContainer "><div class="styles-module__P4S5fa__categoryEyebrow"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_eyebrow">Checklist</span></div><a class="styles-module__P4S5fa__title" target="_self" tabindex="0" href="/blog/release-management-checklist/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium">Release management checklist: Steps for avoiding downtime</span></a></div></div></li><li class="splide__slide"><div class="styles-module__P4S5fa__wrapper styles-module__P4S5fa__dark styles-module__P4S5fa__isNewBlogStyle"><a class="styles-module__P4S5fa__imageWrapper" target="_self" tabindex="0" href="/solutions/release-ai-built-code/"><span class="styles-module__P4S5fa__image"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/aZjnoMFoBIGEgnSQ_Blog_02-26_AI-generatedcodeshipsfast.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920&amp;q=80 1x, https://images.prismic.io/launchdarkly/aZjnoMFoBIGEgnSQ_Blog_02-26_AI-generatedcodeshipsfast.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840&amp;q=80 2x" src="https://images.prismic.io/launchdarkly/aZjnoMFoBIGEgnSQ_Blog_02-26_AI-generatedcodeshipsfast.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840&amp;q=80"/></div></span></a><div class="styles-module__P4S5fa__contentContainer "><div class="styles-module__P4S5fa__categoryEyebrow"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_eyebrow">Solution</span></div><a class="styles-module__P4S5fa__title" target="_self" tabindex="0" href="/solutions/release-ai-built-code/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium">Ship AI-generated code confidently with LaunchDarkly</span></a></div></div></li><li class="splide__slide"><div class="styles-module__P4S5fa__wrapper styles-module__P4S5fa__dark styles-module__P4S5fa__isNewBlogStyle"><a class="styles-module__P4S5fa__imageWrapper" target="_self" tabindex="0" href="/persona/development-teams/"><span class="styles-module__P4S5fa__image"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/d1VBhZjwlbSiXIvN_Blog_07-26_Observabilityisnotenough_HeroImage_1920x1080.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920&amp;q=80 1x, https://images.prismic.io/launchdarkly/d1VBhZjwlbSiXIvN_Blog_07-26_Observabilityisnotenough_HeroImage_1920x1080.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840&amp;q=80 2x" src="https://images.prismic.io/launchdarkly/d1VBhZjwlbSiXIvN_Blog_07-26_Observabilityisnotenough_HeroImage_1920x1080.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840&amp;q=80"/></div></span></a><div class="styles-module__P4S5fa__contentContainer "><div class="styles-module__P4S5fa__categoryEyebrow"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_eyebrow">Development teams</span></div><a class="styles-module__P4S5fa__title" target="_self" tabindex="0" href="/persona/development-teams/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium">See how LaunchDarkly allows development teams to confidently release code</span></a></div></div></li><li class="splide__slide"><div class="styles-module__P4S5fa__wrapper styles-module__P4S5fa__dark styles-module__P4S5fa__isNewBlogStyle"><a class="styles-module__P4S5fa__imageWrapper" target="_self" tabindex="0" href="/blog/feature-flags-aws-devops-agent/"><span class="styles-module__P4S5fa__image"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image"><img alt="" loading="lazy" width="3000" height="1688" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/ajWmqY1P9HI4UwNv_Blog_06-26_JointBlogAWS_HeroImage_1920x1080.png?auto=format%2Ccompress&amp;rect=0%2C0%2C1919%2C1080&amp;w=3840&amp;fit=max&amp;q=80 1x" src="https://images.prismic.io/launchdarkly/ajWmqY1P9HI4UwNv_Blog_06-26_JointBlogAWS_HeroImage_1920x1080.png?auto=format%2Ccompress&amp;rect=0%2C0%2C1919%2C1080&amp;w=3840&amp;fit=max&amp;q=80"/></div></span></a><div class="styles-module__P4S5fa__contentContainer "><div class="styles-module__P4S5fa__categoryEyebrow"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_eyebrow">Developer productivity</span></div><a class="styles-module__P4S5fa__title" target="_self" tabindex="0" href="/blog/feature-flags-aws-devops-agent/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium">Feature flags were always important. SRE agents make them essential.</span></a></div></div></li><li class="splide__slide"><div class="styles-module__P4S5fa__wrapper styles-module__P4S5fa__dark styles-module__P4S5fa__isNewBlogStyle"><a class="styles-module__P4S5fa__imageWrapper" target="_self" tabindex="0" href="/blog/why-launchdarkly-is-standardizing-on-new-relic/"><span class="styles-module__P4S5fa__image"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image"><img alt="" loading="lazy" width="3000" height="1688" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/ajCBcY1P9HI4Uidq_Blog_06-26_NewRelic_HeroImage_1920x1080.png?auto=format%2Ccompress&amp;rect=0%2C0%2C1919%2C1080&amp;w=3840&amp;fit=max&amp;q=80 1x" src="https://images.prismic.io/launchdarkly/ajCBcY1P9HI4Uidq_Blog_06-26_NewRelic_HeroImage_1920x1080.png?auto=format%2Ccompress&amp;rect=0%2C0%2C1919%2C1080&amp;w=3840&amp;fit=max&amp;q=80"/></div></span></a><div class="styles-module__P4S5fa__contentContainer "><div class="styles-module__P4S5fa__categoryEyebrow"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_eyebrow">Developer productivity</span></div><a class="styles-module__P4S5fa__title" target="_self" tabindex="0" href="/blog/why-launchdarkly-is-standardizing-on-new-relic/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium">Why LaunchDarkly is standardizing on New Relic</span></a></div></div></li><li class="splide__slide"><div class="styles-module__P4S5fa__wrapper styles-module__P4S5fa__dark styles-module__P4S5fa__isNewBlogStyle"><a class="styles-module__P4S5fa__imageWrapper" target="_self" tabindex="0" href="/blog/configuring-opentelemetry-collector-aws-firehose/"><span class="styles-module__P4S5fa__image"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image"><img alt="opentelemetry and firehose logos" loading="lazy" width="3000" height="1689" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/aMhTu2GNHVfTPQDE_Blog_08-25_ConfiguringtheOpenTelemetryCollectorforAWSFirehose-1-.png?auto=format%2Ccompress&amp;rect=0%2C0%2C4000%2C2252&amp;w=3840&amp;fit=max&amp;q=80 1x" src="https://images.prismic.io/launchdarkly/aMhTu2GNHVfTPQDE_Blog_08-25_ConfiguringtheOpenTelemetryCollectorforAWSFirehose-1-.png?auto=format%2Ccompress&amp;rect=0%2C0%2C4000%2C2252&amp;w=3840&amp;fit=max&amp;q=80"/></div></span></a><div class="styles-module__P4S5fa__contentContainer "><div class="styles-module__P4S5fa__categoryEyebrow"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_eyebrow">Developer productivity</span></div><a class="styles-module__P4S5fa__title" target="_self" tabindex="0" href="/blog/configuring-opentelemetry-collector-aws-firehose/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium">Configuring the OpenTelemetry Collector for AWS Firehose</span></a></div></div></li><li class="splide__slide"><div class="styles-module__P4S5fa__wrapper styles-module__P4S5fa__dark styles-module__P4S5fa__isNewBlogStyle"><a class="styles-module__P4S5fa__imageWrapper" target="_self" tabindex="0" href="/blog/how-we-built-logging-service-with-clickhouse/"><span class="styles-module__P4S5fa__image"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image"><img alt="" loading="lazy" width="3000" height="1689" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/aMhRBGGNHVfTPQCW_Blog_08-25_HowwebuiltloggingasaservicewithClickHouse.png?auto=format%2Ccompress&amp;rect=0%2C0%2C4000%2C2252&amp;w=3840&amp;fit=max&amp;q=80 1x" src="https://images.prismic.io/launchdarkly/aMhRBGGNHVfTPQCW_Blog_08-25_HowwebuiltloggingasaservicewithClickHouse.png?auto=format%2Ccompress&amp;rect=0%2C0%2C4000%2C2252&amp;w=3840&amp;fit=max&amp;q=80"/></div></span></a><div class="styles-module__P4S5fa__contentContainer "><div class="styles-module__P4S5fa__categoryEyebrow"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_eyebrow">Developer productivity</span></div><a class="styles-module__P4S5fa__title" target="_self" tabindex="0" href="/blog/how-we-built-logging-service-with-clickhouse/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium">How we built logging as a service with Clickhouse</span></a></div></div></li><li class="splide__slide"><div class="styles-module__P4S5fa__wrapper styles-module__P4S5fa__dark styles-module__P4S5fa__isNewBlogStyle"><a class="styles-module__P4S5fa__imageWrapper" target="_self" tabindex="0" href="/blog/releasing-measuring-improving-in-real-time/"><span class="styles-module__P4S5fa__image"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image"><img alt="" loading="lazy" width="3000" height="1688" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/aLCdtGGNHVfTOarb_Blog_08-25_FeatureFeedbackLoop_1920x1080.png?auto=format%2Ccompress&amp;rect=0%2C0%2C1919%2C1080&amp;w=3840&amp;fit=max&amp;q=80 1x" src="https://images.prismic.io/launchdarkly/aLCdtGGNHVfTOarb_Blog_08-25_FeatureFeedbackLoop_1920x1080.png?auto=format%2Ccompress&amp;rect=0%2C0%2C1919%2C1080&amp;w=3840&amp;fit=max&amp;q=80"/></div></span></a><div class="styles-module__P4S5fa__contentContainer "><div class="styles-module__P4S5fa__categoryEyebrow"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_eyebrow">Developer productivity</span></div><a class="styles-module__P4S5fa__title" target="_self" tabindex="0" href="/blog/releasing-measuring-improving-in-real-time/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium">Releasing, measuring, and improving in real time</span></a></div></div></li><li class="splide__slide"><div class="styles-module__P4S5fa__wrapper styles-module__P4S5fa__dark styles-module__P4S5fa__isNewBlogStyle"><a class="styles-module__P4S5fa__imageWrapper" target="_self" tabindex="0" href="/blog/auto-generating-openapi-documents-with-typescript-/"><span class="styles-module__P4S5fa__image"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image"><img alt="openapi and typescript logos" loading="lazy" width="3000" height="1689" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly/aKYI7aTt2nPbai0y_Blog_08-25_Auto-generatingOpenAPIdocumentswithTypeScriptinterfaces.png?auto=format%2Ccompress&amp;rect=0%2C0%2C4000%2C2252&amp;w=3840&amp;fit=max&amp;q=80 1x" src="https://images.prismic.io/launchdarkly/aKYI7aTt2nPbai0y_Blog_08-25_Auto-generatingOpenAPIdocumentswithTypeScriptinterfaces.png?auto=format%2Ccompress&amp;rect=0%2C0%2C4000%2C2252&amp;w=3840&amp;fit=max&amp;q=80"/></div></span></a><div class="styles-module__P4S5fa__contentContainer "><div class="styles-module__P4S5fa__categoryEyebrow"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_eyebrow">Developer productivity</span></div><a class="styles-module__P4S5fa__title" target="_self" tabindex="0" href="/blog/auto-generating-openapi-documents-with-typescript-/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium">Auto-generating OpenAPI documents with TypeScript interfaces</span></a></div></div></li></ul></div></div></div></div></div></div></div><div class="styles-module__HXqOTa__newsletterContainer"><div class=" undefined styles-module__yaWGhq__blogNewsletter styles-module__yaWGhq__horizontalVersion"><div class="styles-module__yaWGhq__blogNewsletterSection"><div class="styles-module__yaWGhq__textContent"><img class="styles-module__yaWGhq__newsletterIconHorizontal" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aimnSAeQX7-eXL6I_icon--blog-letter-in-envelop.svg" alt="Letter in envelope icon" loading="lazy"/><h5 class="styles-module__J0n02W__variant_h5 styles-module__J0n02W__weight_medium">Sign up for our newsletter</h5><p class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__paragraph styles-module__J0n02W__weight_regular styles-module__yaWGhq__description">Get all the content, tips, and news you can use.</p><div class="styles-module__WD-Msa__tos full-width-version-form-tos styles-module__yaWGhq__formTos styles-module__yaWGhq__fullWidthVersion"><p>By supplying my contact information, I authorize LaunchDarkly to contact me with personalized marketing communications about our products and services. See our<!-- --> <a href="https://launchdarkly.com/policies/privacy/">Privacy Policy</a> for more details, or<!-- --> <a href="https://go.launchdarkly.com/UnsubscribePage.html">Opt-Out</a> at any time.</p></div></div><div class="styles-module__yaWGhq__customForm" id="customNewsletterForm"><div class="styles-module__yaWGhq__formElements" id="customNewsletterFormElements"><input id="customNewsletterEmail" type="email" placeholder="Email address" aria-label="Email address" name="email" value=""/><button class="styles-module__d4f9cW__button styles-module__d4f9cW__variant_dark styles-module__d4f9cW__size_default styles-module__yaWGhq__subscribeButton" type="button"><span class="styles-module__d4f9cW__label">Subscribe</span><span class="styles-module__d4f9cW__arrowBox false"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__d4f9cW__arrow" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></span></button></div><div class="styles-module__yaWGhq__successMessage" id="customNewsletterSuccessMessage"></div></div></div></div></div><div class="styles-module__HXqOTa__g2BannerContainer"><a class="styles-module__MISuva__blogG2Banner" target="_self" tabindex="0" href="/g2-review/"><div class="styles-module__MISuva__blogG2BannerInner"><div><img class="styles-module__MISuva__blogG2BannerImage" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ainJTAeQX7-eXMEO_icon-bw--growing-up-arrow.svg" alt="Climbing up arrow" loading="lazy"/></div><div class="styles-module__MISuva__blogG2BannerContent"><h4 class="styles-module__J0n02W__variant_h4 styles-module__J0n02W__color_white styles-module__J0n02W__weight_medium">LaunchDarkly Tops G2 Grid for Feature Management</h4></div><div class="styles-module__MISuva__blogG2BannerButton"><button class="styles-module__d4f9cW__button styles-module__d4f9cW__variant_lime styles-module__d4f9cW__size_default" type="button"><span class="styles-module__d4f9cW__label">Learn more</span><span class="styles-module__d4f9cW__arrowBox false"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__d4f9cW__arrow" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></span></button></div></div></a></div><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","@id":"https://launchdarkly.com/testing-in-production-for-safety-and-sanity/#article","about":[{"@type":"Thing","name":"Testing in Production to Stay Safe and Sensible - LaunchDarkly"}],"author":[{"@type":"Person","name":"Heidi Waterhouse","url":"https://launchdarkly.com/blog/author/heidiw/"}],"datePublished":"2021-03-18T17:36:23.000Z","dateModified":"2026-09-04T20:56:16.000Z","headline":"Testing in Production to Stay Safe and Sensible - LaunchDarkly","description":"Testing software changes in a real-world production environment is essential to modern development. Learn how to test in production safely with feature flags using a feature management platform.","image":{"@type":"ImageObject","url":"https://images.prismic.io/launchdarkly/f44cc827-b177-4531-8dc0-25a0ed02bcc9_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress,format"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://launchdarkly.com/testing-in-production-for-safety-and-sanity/#webpage"},"publisher":{"@id":"https://launchdarkly.com/#organization"}}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","@id":"https://launchdarkly.com/#organization","name":"LaunchDarkly","legalName":"LaunchDarkly","description":"LaunchDarkly helps teams safely manage code and AI agents in production with feature flags, progressive delivery, automated rollback, and runtime control.","url":"https://launchdarkly.com/","logo":{"@type":"ImageObject","url":"https://launchdarkly.com/schema-icon.png","width":"512","height":"512"},"sameAs":["https://twitter.com/LaunchDarkly","https://www.linkedin.com/company/launchdarkly","https://github.com/launchdarkly"]}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","description":"Breadcrumbs list","name":"Breadcrumbs","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://launchdarkly.com/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://launchdarkly.com/blog"},{"@type":"ListItem","position":3,"name":"Testing in Production to Stay Safe and Sensible - LaunchDarkly","item":"https://launchdarkly.com/testing-in-production-for-safety-and-sanity/"}]}</script></div></section><section class="styles-module__NFwUga__newSection styles-module__5aVuCq__resources undefined" data-name="Resources"><div class="styles-module__NFwUga__contentContainer "><header class="styles-module__5aVuCq__header"><h3 class="styles-module__J0n02W__variant_h3 styles-module__J0n02W__color_gray01 styles-module__J0n02W__weight_semibold styles-module__5aVuCq__heading">Resources to get started.</h3></header><ul class="styles-module__5aVuCq__cards"><div class="styles-module__5aVuCq__card undefined"><a class="styles-module__5aVuCq__cardLink" target="_self" tabindex="0" data-analytics="resources-check-out-the-blog-" href="/blog/"><div class="styles-module__5aVuCq__cardMedia"><div class="styles-module__5aVuCq__cardImage styles-module__5aVuCq__aspect16x9"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agtlhaYofJOwHWAR_img-res-card--BLOG.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agtlhaYofJOwHWAR_img-res-card--BLOG.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agtlhaYofJOwHWAR_img-res-card--BLOG.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><div class="styles-module__5aVuCq__cardButton"><div class="styles-module__5aVuCq__cardArrow"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></div><div class="styles-module__5aVuCq__cardBody"><h3 class="styles-module__J0n02W__variant_h5 styles-module__J0n02W__color_gray01 styles-module__J0n02W__weight_medium styles-module__J0n02W__fontFamily_sohne styles-module__5aVuCq__cardTitle">Check out the blog.</h3><span class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__color_gray04 styles-module__J0n02W__weight_regular styles-module__5aVuCq__cardEyebrow">Blog</span><p class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__paragraph styles-module__J0n02W__color_gray02 styles-module__J0n02W__weight_regular styles-module__5aVuCq__cardDescription">Read about LaunchDarkly news, product updates, and more.</p></div></a></div><div class="styles-module__5aVuCq__card undefined"><!--$?--><template id="B:a"></template><a href="https://launchdarkly.com/docs/home" class="styles-module__5aVuCq__cardLink" target="_self" tabindex="0" data-analytics="resources-explore-our-docs-"><div class="styles-module__5aVuCq__cardMedia"><div class="styles-module__5aVuCq__cardImage styles-module__5aVuCq__aspect16x9"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agtlhqYofJOwHWAS_img-res-card--DOCS.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agtlhqYofJOwHWAS_img-res-card--DOCS.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agtlhqYofJOwHWAS_img-res-card--DOCS.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><div class="styles-module__5aVuCq__cardButton"><div class="styles-module__5aVuCq__cardArrow"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></div><div class="styles-module__5aVuCq__cardBody"><h3 class="styles-module__J0n02W__variant_h5 styles-module__J0n02W__color_gray01 styles-module__J0n02W__weight_medium styles-module__J0n02W__fontFamily_sohne styles-module__5aVuCq__cardTitle">Explore our docs.</h3><span class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__color_gray04 styles-module__J0n02W__weight_regular styles-module__5aVuCq__cardEyebrow">Docs</span><p class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__paragraph styles-module__J0n02W__color_gray02 styles-module__J0n02W__weight_regular styles-module__5aVuCq__cardDescription">Learn best practices for getting started with LaunchDarkly.</p></div></a><!--/$--></div><div class="styles-module__5aVuCq__card undefined"><a href="https://www.youtube.com/@LaunchDarkly" class="styles-module__5aVuCq__cardLink" target="_blank" tabindex="0" data-analytics="resources-watch-on-demand-" rel="nofollow noreferrer"><div class="styles-module__5aVuCq__cardMedia"><div class="styles-module__5aVuCq__cardImage styles-module__5aVuCq__aspect16x9"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agtliKYofJOwHWAU_img-res-card--VIDEOS.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agtliKYofJOwHWAU_img-res-card--VIDEOS.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agtliKYofJOwHWAU_img-res-card--VIDEOS.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><div class="styles-module__5aVuCq__cardButton"><div class="styles-module__5aVuCq__cardArrow"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></div><div class="styles-module__5aVuCq__cardBody"><h3 class="styles-module__J0n02W__variant_h5 styles-module__J0n02W__color_gray01 styles-module__J0n02W__weight_medium styles-module__J0n02W__fontFamily_sohne styles-module__5aVuCq__cardTitle">Watch on demand.</h3><span class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__color_gray04 styles-module__J0n02W__weight_regular styles-module__5aVuCq__cardEyebrow">Videos</span><p class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__paragraph styles-module__J0n02W__color_gray02 styles-module__J0n02W__weight_regular styles-module__5aVuCq__cardDescription">Check out demos and tutorials to see LaunchDarkly in action.</p></div></a></div><div class="styles-module__5aVuCq__card undefined"><a class="styles-module__5aVuCq__cardLink" target="_self" tabindex="0" data-analytics="resources-connect-at-events-" href="/events-webinars/"><div class="styles-module__5aVuCq__cardMedia"><div class="styles-module__5aVuCq__cardImage styles-module__5aVuCq__aspect16x9"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agtlh6YofJOwHWAT_img-res-card--Events.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agtlh6YofJOwHWAT_img-res-card--Events.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agtlh6YofJOwHWAT_img-res-card--Events.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><div class="styles-module__5aVuCq__cardButton"><div class="styles-module__5aVuCq__cardArrow"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></div><div class="styles-module__5aVuCq__cardBody"><h3 class="styles-module__J0n02W__variant_h5 styles-module__J0n02W__color_gray01 styles-module__J0n02W__weight_medium styles-module__J0n02W__fontFamily_sohne styles-module__5aVuCq__cardTitle">Connect at events.</h3><span class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__color_gray04 styles-module__J0n02W__weight_regular styles-module__5aVuCq__cardEyebrow">Events</span><p class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__paragraph styles-module__J0n02W__color_gray02 styles-module__J0n02W__weight_regular styles-module__5aVuCq__cardDescription">Explore ways to connect with us in person and virtually.</p></div></a></div></ul></div></section></main></div><a id="footer" tabindex="-1"></a><footer class="styles-module__-47ntW__footer " data-theme="dark"><div class="styles-module__-47ntW__footerInnerWrapper"><div class="styles-module__dkQbjG__footerTextMarquee"><div class="splide" extensions="[object Object]"><div class="splide__track"><ul class="splide__list"><li class="splide__slide"><div class="styles-module__dkQbjG__footerTextMarqueeItem"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/afp9m8BOoF08xpZG_icon--rotating-text-star.svg" alt="Star icon" loading="lazy"/><span>Ready to take control in prod?</span></div></li></ul></div></div></div><div class="styles-module__-47ntW__footerInner"><div class="styles-module__-47ntW__footerCards styles-module__-47ntW__footerRow"><div class="styles-module__-47ntW__logo styles-module__-47ntW__firstCol"><a class="styles-module__SHyKFW__logo styles-module__SHyKFW__logoOnly" target="_self" tabindex="0" aria-label="LaunchDarkly Home" data-analytics="footer-logo" href="/"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 39 39"><path fill="#fff" d="M19.843 39c-.3 0-.6-.172-.772-.474-.128-.302-.128-.603.086-.862l9.129-12.626-15.986 6.55c-.129.043-.214.086-.343.086-.386 0-.728-.258-.814-.603-.129-.345.043-.733.343-.948l14.057-8.318L.814 20.383C.3 20.34 0 19.953 0 19.522c0-.388.257-.82.814-.862l24.729-1.422L11.486 8.92c-.3-.215-.472-.603-.343-.948.128-.344.428-.603.814-.603.129 0 .214.043.343.086l15.986 6.55-9.129-12.67c-.171-.258-.214-.602-.086-.861C19.2.172 19.5 0 19.843 0c.214 0 .428.086.6.259l18.171 18.228c.257.259.386.647.386.992 0 .344-.129.689-.386.99L20.443 38.742a.84.84 0 0 1-.6.259"></path></svg></a></div><div class="styles-module__-47ntW__footerCardsContainer styles-module__-47ntW__secondCol"><a class="styles-module__-47ntW__footerCard styles-module__-47ntW__cardGreen" target="_self" tabindex="0" data-analytics="footer-cta-get-a-demo" href="/request-a-demo/"><div><div class="styles-module__-47ntW__footerCardHeading"><div class="styles-module__-47ntW__footerCardArrow styles-module__-47ntW__cardArrowGreen"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div><h5>Get a demo</h5></div></div><div class="styles-module__-47ntW__footerCardImage"><div class="styles-module__-47ntW__footerCardImageInner"></div><div class="styles-module__-47ntW__footerCardImageBg"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ajRwTY1P9HI4UtaI_img-bg--footer-get-demo.svg" alt="Get a demo" loading="eager"/></div></div></a><!--$?--><template id="B:b"></template><a href="https://app.launchdarkly.com/signup" rel="nofollow noopener noreferrer" class="styles-module__-47ntW__footerCard styles-module__-47ntW__cardPurple" target="_self" tabindex="0" data-analytics="footer-cta-free-trial"><div><div class="styles-module__-47ntW__footerCardHeading"><div class="styles-module__-47ntW__footerCardArrow styles-module__-47ntW__cardArrowPurple"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div><h5>Free trial</h5></div></div><div class="styles-module__-47ntW__footerCardImage"><div class="styles-module__-47ntW__footerCardImageInner"></div><div class="styles-module__-47ntW__footerCardImageBg"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ajRwTI1P9HI4UtaH_img-bg--footer-free-trial.svg" alt="Free trial" loading="eager"/></div></div></a><!--/$--><a class="styles-module__-47ntW__footerCard styles-module__-47ntW__cardOrange" target="_self" tabindex="0" data-analytics="footer-cta-codecontrol" href="/platform/code-control/"><div><div class="styles-module__-47ntW__footerCardHeading"><div class="styles-module__-47ntW__footerCardArrow styles-module__-47ntW__cardArrowOrange"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div><h5>CodeControl</h5></div></div><div class="styles-module__-47ntW__footerCardImage"><div class="styles-module__-47ntW__footerCardImageInner"></div><div class="styles-module__-47ntW__footerCardImageBg"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ajRwS41P9HI4UtaG_img-bg--footer-code-control.svg" alt="CodeControl" loading="eager"/></div></div></a><a class="styles-module__-47ntW__footerCard styles-module__-47ntW__cardBlue" target="_self" tabindex="0" data-analytics="footer-cta-agentcontrol" href="/platform/agent-control/"><div><div class="styles-module__-47ntW__footerCardHeading"><div class="styles-module__-47ntW__footerCardArrow styles-module__-47ntW__cardArrowBlue"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div><h5>AgentControl</h5></div></div><div class="styles-module__-47ntW__footerCardImage"><div class="styles-module__-47ntW__footerCardImageInner"></div><div class="styles-module__-47ntW__footerCardImageBg"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ajRwSo1P9HI4UtaF_img-bg--footer-agent-control.svg" alt="AgentControl" loading="eager"/></div></div></a></div></div><div class="styles-module__-47ntW__footerRow undefined"><div class="styles-module__-47ntW__firstCol"></div><div class="styles-module__-47ntW__secondCol styles-module__-47ntW__footerLinks"><div class="styles-module__-47ntW__footerLinksColumn styles-module__-47ntW__newsletterColumn"><div class="styles-module__-47ntW__newsletterContainer"><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_lg styles-module__5zGs1G__weight_medium">Inboxes love LaunchDarkly.</p><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__-47ntW__newsletterFooterText newsletter-footer-text">Get the latest on controlling code and agents in production, with tips, insights, and updates you can actually use.</p><div class="styles-module__-47ntW__newsletterForm newsletter-footer-mkto-form"><div class="mktoFormWrapper"><form id="mktoForm_2272"></form></div></div></div><div class="styles-module__-47ntW__socialMedia"><div class="styles-module__-47ntW__iconContainer"><a href="https://twitter.com/launchdarkly" target="_blank" tabindex="0" aria-label="twitter" data-analytics="footer-social-twitter" rel="nofollow noreferrer"><img alt="small twitter logo" data-analytics="footer-social-twitter" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/b4508c29-da0c-4e9b-bcae-205a95a6ba5d_logo--x-twitter.svg?auto=compress,format"/></a><a href="https://www.youtube.com/@LaunchDarkly" target="_blank" tabindex="0" aria-label="YouTube" data-analytics="footer-social-youtube" rel="nofollow noreferrer"><img alt="small YouTube logo" data-analytics="footer-social-youtube" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/276be984-0bd0-44ed-9e32-44a21a0c4fac_icon-youtube.svg"/></a><a href="https://www.linkedin.com/company/launchdarkly/mycompany/" target="_blank" tabindex="0" aria-label="LinkedIn" data-analytics="footer-social-linkedin" rel="nofollow noreferrer"><img alt="small LinkedIn logo" data-analytics="footer-social-linkedin" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/8b512fb1-6ecc-4e7f-bfe2-368f1a29898b_icon-LinkedIn.svg"/></a><a href="https://discord.com/invite/launchdarklycommunity" target="_blank" tabindex="0" aria-label="Discord" data-analytics="footer-social-discord" rel="nofollow noreferrer"><img alt="small Discord logo" data-analytics="footer-social-discord" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ZpaT7h5LeNNTxNRX_discord-logo-white.svg?auto=compress,format"/></a><a href="https://www.instagram.com/launchdarkly/" target="_blank" tabindex="0" aria-label="Instagram" data-analytics="footer-social-instagram" rel="nofollow noreferrer"><img alt="small Instagram logo" data-analytics="footer-social-instagram" loading="lazy" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/8b8446e4-02c7-468e-bb32-79d0432dd1d0_instagram-icon-small.svg"/></a></div></div></div><div class="styles-module__-47ntW__footerLinksColumns"><div class="styles-module__-47ntW__footerLinksColumn"><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_sm styles-module__5zGs1G__weight_medium styles-module__5zGs1G__textTransform_uppercase styles-module__-47ntW__footerLinksColumnTitle">Company</p><ul><li><a target="_self" tabindex="0" data-analytics="footer-company-about-us" href="/about-us/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">About Us</span></a></li><li><a target="_self" tabindex="0" data-analytics="footer-company-careers" href="/careers/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Careers</span></a></li><li><a target="_self" tabindex="0" data-analytics="footer-company-media-analysts" href="/press-and-analysts/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Media &amp; Analysts</span></a></li><li><a target="_self" tabindex="0" data-analytics="footer-company-partner-program" href="/partner-program/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Partner Program</span></a></li><li><a target="_self" tabindex="0" data-analytics="footer-company-terms-policies" href="/policies/subscription-terms/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Terms &amp; Policies</span></a></li><li><a target="_self" tabindex="0" data-analytics="footer-company-contact-us" href="/contact-us/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Contact Us</span></a></li><li><a target="_self" tabindex="0" data-analytics="footer-company-community" href="/community/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Community</span></a></li></ul></div><div class="styles-module__-47ntW__footerLinksColumn"><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_sm styles-module__5zGs1G__weight_medium styles-module__5zGs1G__textTransform_uppercase styles-module__-47ntW__footerLinksColumnTitle">Support</p><ul class="styles-module__-47ntW__footerLinksColumnSupport"><li><!--$--><a href="https://support.launchdarkly.com/" rel="nofollow noopener noreferrer" target="_self" tabindex="0" data-analytics="footer-support-support-home"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Support home</span></a><!--/$--></li><li><a target="_self" tabindex="0" data-analytics="footer-support-professional-services" href="/services/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Professional Services</span></a></li><li><!--$--><a href="https://launchdarkly.com/docs/home" rel="" target="_self" tabindex="0" data-analytics="footer-support-documentation"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Documentation</span></a><!--/$--></li><li><!--$--><a href="https://status.launchdarkly.com/" rel="nofollow noopener noreferrer" target="_self" tabindex="0" data-analytics="footer-support-status"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Status</span></a><!--/$--></li><li><a href="#" data-analytics="footer-support-do-not-sell">Do not Sell or Share my Personal Information</a></li></ul></div><div class="styles-module__-47ntW__footerLinksColumn"><p class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_sm styles-module__5zGs1G__weight_medium styles-module__5zGs1G__textTransform_uppercase styles-module__-47ntW__footerLinksColumnTitle">Why Us</p><ul><li><a target="_self" tabindex="0" data-analytics="footer-why-us-economic-impact-of-launchdarkly" href="/guides/forrester-tei-report-2026/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Economic Impact of LaunchDarkly</span></a></li><li><a target="_self" tabindex="0" data-analytics="footer-why-us-how-launchdarkly-works" href="/how-it-works/platform/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">How LaunchDarkly works</span></a></li><li><a target="_self" tabindex="0" data-analytics="footer-why-us-solutions" href="/solutions/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Solutions</span></a></li><li><a target="_self" tabindex="0" data-analytics="footer-why-us-trust-security" href="/security/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Trust &amp; Security</span></a></li><li><!--$--><a href="https://trust.launchdarkly.com" rel="nofollow noopener noreferrer" target="_self" tabindex="0" data-analytics="footer-why-us-trust-center"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">Trust Center</span></a><!--/$--></li><li><a target="_self" tabindex="0" data-analytics="footer-why-us-launchdarkly-vs-competitors" href="/compare/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">LaunchDarkly vs. Competitors</span></a></li><li><a target="_self" tabindex="0" data-analytics="footer-why-us-launchdarkly-on-aws" href="/solutions/launchdarkly-aws/"><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body">LaunchDarkly on AWS</span></a></li></ul></div></div></div></div><div class="styles-module__-47ntW__footerMobileLogo"><a class="styles-module__SHyKFW__logo" target="_self" tabindex="0" aria-label="LaunchDarkly Home" data-analytics="footer-mobile-logo" href="/"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 156 24"><g fill="#000" clip-path="url(#brand-dark_svg__a)"><path d="M9.33 18.729V16.45H2.578V5.272H0v13.457zm6.486-.424q.837-.636 1.276-1.669v2.093h2.472v-6.49c0-.689-.159-1.325-.505-1.854s-.851-.954-1.488-1.245-1.409-.45-2.286-.45c-.479 0-.957.053-1.409.132a6.4 6.4 0 0 0-1.276.371 6 6 0 0 0-1.09.556l.08 2.305c.611-.397 1.196-.689 1.781-.901s1.223-.318 1.94-.318c.558 0 1.01.133 1.329.397s.478.609.478 1.033v.662h-2.233c-1.329 0-2.366.265-3.136.821s-1.143 1.325-1.143 2.305a3.1 3.1 0 0 0 .372 1.483 2.56 2.56 0 0 0 1.09 1.033c.478.265 1.037.371 1.648.371.851 0 1.542-.212 2.1-.636zm-2.233-1.669a1.08 1.08 0 0 1-.425-.874 1.12 1.12 0 0 1 .585-1.033c.372-.239.957-.371 1.701-.371h1.595v.371c0 .318-.08.636-.266.98a2.35 2.35 0 0 1-.824.874 2.33 2.33 0 0 1-1.276.371c-.452 0-.824-.106-1.09-.318m13.848 1.642c.585-.503 1.01-1.192 1.276-2.04v2.49h2.499V8.98h-2.498v4.556q0 .993-.319 1.748c-.319.755-.505.927-.904 1.192a2.23 2.23 0 0 1-1.356.424c-.558 0-.983-.159-1.302-.477-.292-.318-.452-.795-.452-1.404V8.98h-2.499v6.093c0 1.272.292 2.225.904 2.914s1.409 1.033 2.445 1.033c.904 0 1.621-.238 2.206-.742m9.011.45v-4.556q0-.993.319-1.748c.319-.755.505-.927.877-1.192.372-.291.824-.424 1.329-.424.558 0 .983.159 1.302.477.292.318.452.795.452 1.404v6.066h2.525v-6.093c0-1.271-.292-2.225-.904-2.914s-1.409-1.033-2.445-1.033c-.877 0-1.595.265-2.18.742-.558.503-.983 1.192-1.276 2.04v-2.49h-2.498v9.748h2.499zm15.257.212a8 8 0 0 0 .904-.212c.292-.079.532-.186.797-.265l.027-2.358c-.399.212-.824.344-1.276.45a6 6 0 0 1-1.356.159c-.665 0-1.249-.132-1.701-.371a2.24 2.24 0 0 1-1.01-1.033 3.25 3.25 0 0 1-.319-1.457 3.34 3.34 0 0 1 .319-1.457c.213-.424.558-.768 1.01-1.033s1.01-.371 1.648-.371a6 6 0 0 1 1.409.159c.452.106.851.265 1.249.45l-.027-2.437c-.292-.106-.558-.212-.824-.265a4.3 4.3 0 0 0-.904-.159 6.3 6.3 0 0 0-1.037-.079c-1.116 0-2.073.238-2.897.689a4.95 4.95 0 0 0-1.914 1.854c-.452.795-.664 1.669-.664 2.676 0 .98.239 1.881.691 2.649a4.65 4.65 0 0 0 1.914 1.801c.824.424 1.781.662 2.871.662.399.026.771 0 1.09-.053zm6.459-.212v-4.556q0-.993.319-1.748c.319-.755.505-.927.904-1.192a2.15 2.15 0 0 1 1.329-.424c.585 0 1.01.159 1.302.477s.452.795.452 1.404v6.066h2.499v-6.093c0-1.271-.292-2.225-.904-2.914s-1.409-1.033-2.445-1.033c-.877 0-1.621.265-2.18.742-.585.503-1.01 1.192-1.276 2.04V5.272h-2.472v13.457zm14.885 0c1.435 0 2.658-.265 3.668-.821a5.6 5.6 0 0 0 2.313-2.331c.532-1.006.797-2.199.797-3.55s-.266-2.543-.797-3.55-1.302-1.801-2.312-2.358-2.233-.821-3.668-.821H67.86v13.457h5.183zm-2.605-2.278v-8.9h2.578c1.302 0 2.313.397 3.03 1.166.744.795 1.09 1.881 1.09 3.285s-.372 2.517-1.09 3.285c-.744.768-1.754 1.165-3.03 1.165h-2.578zm15.922 1.854a4 4 0 0 0 1.276-1.669v2.093h2.472v-6.49c0-.689-.159-1.325-.505-1.854s-.851-.954-1.489-1.245-1.409-.45-2.286-.45c-.478 0-.957.053-1.409.132a6.4 6.4 0 0 0-1.276.371 6 6 0 0 0-1.09.556l.08 2.305c.611-.397 1.196-.689 1.781-.901s1.223-.318 1.94-.318c.558 0 1.01.133 1.329.397s.478.609.478 1.033v.662h-2.18c-1.329 0-2.366.265-3.136.821s-1.143 1.325-1.143 2.305a3.1 3.1 0 0 0 .372 1.483 2.56 2.56 0 0 0 1.09 1.033c.478.265 1.037.371 1.648.371.824 0 1.489-.212 2.047-.636zm-2.233-1.669a1.08 1.08 0 0 1-.425-.874 1.12 1.12 0 0 1 .585-1.033c.372-.239.957-.371 1.701-.371h1.595v.371c0 .318-.08.636-.266.98a2.35 2.35 0 0 1-.824.874c-.372.238-.771.344-1.249.344-.452.027-.824-.079-1.116-.291zm11.031 2.093V14.57c0-1.086.239-1.907.691-2.464s1.09-.848 1.861-.848a3.3 3.3 0 0 1 1.037.159v-2.41c-.159-.053-.319-.079-.478-.106s-.346-.026-.532-.026c-.611 0-1.143.212-1.568.636s-.771 1.033-.983 1.775V8.954h-2.499v9.748h2.472v.026zm7.681 0v-3.152l.904-.848 2.924 4h2.977l-4.173-5.695 4.093-4.053h-3.136l-3.562 3.444V5.272h-2.472v13.457zm10.819 0V5.272h-2.499v13.457zm3.827 3.629c.93 0 1.675-.185 2.259-.556s1.064-1.033 1.462-1.96l4.492-10.861h-2.578l-2.631 6.808-2.712-6.808h-2.578l4.014 9.722-.213.503c-.133.318-.292.583-.531.715-.213.159-.559.238-1.011.238h-2.073v2.199zM144.092 24a.56.56 0 0 1-.478-.291c-.08-.185-.08-.371.053-.53l5.662-7.762-9.915 4.027c-.08.027-.133.053-.212.053a.52.52 0 0 1-.505-.371c-.08-.212.026-.45.212-.583l8.719-5.113-15.337-.874a.525.525 0 0 1-.505-.53.52.52 0 0 1 .505-.53l15.337-.874-8.719-5.113c-.186-.132-.292-.371-.212-.583s.265-.371.505-.371c.079 0 .132.026.212.053l9.915 4.026-5.662-7.788c-.106-.159-.133-.371-.053-.53a.5.5 0 0 1 .478-.291c.133 0 .266.053.372.159l11.271 11.205c.159.159.239.397.239.609s-.08.424-.239.609l-11.271 11.232a.53.53 0 0 1-.372.159z"></path></g><defs><clipPath id="brand-dark_svg__a"><path fill="#000" d="M0 0h156v24H0z"></path></clipPath></defs></svg></a></div><div class="styles-module__-47ntW__footerRow styles-module__-47ntW__footerBottom"><div class="styles-module__-47ntW__footerBottomLeft"></div><div class="styles-module__-47ntW__footerBottomRight"><a target="_self" tabindex="0" data-analytics="footer-terms-conditions" href="/terms-of-service/">Terms &amp; Conditions</a><a target="_self" tabindex="0" data-analytics="footer-privacy-policy" href="/policies/privacy/">Privacy Policy</a><span class="styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_sm">©<!-- -->2026<!-- --> Catamorphic Co.</span></div></div></div></div></footer><!--$--><!--/$--><div id="modal" class="styles-module__9Rojna__modal"></div><script>requestAnimationFrame(function(){$RT=performance.now()});</script><script src="/_next/static/chunks/webpack-6feccfddff7ef52e.js" id="_R_" async=""></script><div hidden id="S:0"><a href="https://academy.launchdarkly.com/" rel="nofollow noopener noreferrer" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-success-academy"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSQ6YofJOwHTui_icon-main-nav--Academy.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSQ6YofJOwHTui_icon-main-nav--Academy.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSQ6YofJOwHTui_icon-main-nav--Academy.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Academy</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div><script>$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};
$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};$RC("B:0","S:0")</script><div hidden id="S:1"><a href="https://support.launchdarkly.com/" rel="nofollow noopener noreferrer" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-get-help-help-center"><div class="styles-module__9d2Dpq__productLinkInner"><div class="styles-module__9d2Dpq__linkInnerIconContainer"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpTiKYofJOwHTu2_icon-main-nav--help-center.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpTiKYofJOwHTu2_icon-main-nav--help-center.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpTiKYofJOwHTu2_icon-main-nav--help-center.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><div class="styles-module__9d2Dpq__productLinkTextContainer"><h6>Help Center</h6><p>Explore help topics for everything LaunchDarkly.</p></div></div></a></div><script>$RC("B:1","S:1")</script><div hidden id="S:2"><a href="https://support.launchdarkly.com/hc/en-us/requests/new?ticket_form_id=360000836893" rel="nofollow noopener noreferrer" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-get-help-request-support"><div class="styles-module__9d2Dpq__productLinkInner"><div class="styles-module__9d2Dpq__linkInnerIconContainer"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpTiaYofJOwHTu3_icon-main-nav--request-support.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpTiaYofJOwHTu3_icon-main-nav--request-support.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpTiaYofJOwHTu3_icon-main-nav--request-support.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><div class="styles-module__9d2Dpq__productLinkTextContainer"><h6>Request support</h6><p>Reach out to us for direct answers to your questions.</p></div></div></a></div><script>$RC("B:2","S:2")</script><div hidden id="S:3"><a href="https://launchdarkly.com/docs/home" rel="" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-resources-docs-home"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSVKYofJOwHTuo_icon-main-nav--DocsHome.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSVKYofJOwHTuo_icon-main-nav--DocsHome.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSVKYofJOwHTuo_icon-main-nav--DocsHome.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Docs home</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div><script>$RC("B:3","S:3")</script><div hidden id="S:4"><a href="https://launchdarkly.com/docs/home/getting-started" rel="" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-resources-feature-flags-quickstart"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSVaYofJOwHTup_icon-main-nav--FeatureFlagQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSVaYofJOwHTup_icon-main-nav--FeatureFlagQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSVaYofJOwHTup_icon-main-nav--FeatureFlagQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Feature flags Quickstart</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div><script>$RC("B:4","S:4")</script><div hidden id="S:5"><a href="https://launchdarkly.com/docs/home/agentcontrol/quickstart" rel="" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-resources-agentcontrol-quickstart"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSUqYofJOwHTum_icon-main-nav--AIConfigsQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSUqYofJOwHTum_icon-main-nav--AIConfigsQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSUqYofJOwHTum_icon-main-nav--AIConfigsQuickstart.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>AgentControl Quickstart</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div><script>$RC("B:5","S:5")</script><div hidden id="S:6"><a href="https://launchdarkly.com/docs/api/" rel="" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-resources-api-docs"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSU6YofJOwHTun_icon-main-nav--APIDocs.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSU6YofJOwHTun_icon-main-nav--APIDocs.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSU6YofJOwHTun_icon-main-nav--APIDocs.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>API docs</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div><script>$RC("B:6","S:6")</script><div hidden id="S:7"><a href="https://launchdarkly.com/docs/blog" rel="" class="styles-module__9d2Dpq__link " target="_self" tabindex="0" data-analytics="nav-workflow-flagship-engineering-blog"><div class="styles-module__9d2Dpq__linkWrapper"><div class="styles-module__9d2Dpq__linkIcon"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agpSZKYofJOwHTur_icon-main-nav--FlagshipEngineeringBlog.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agpSZKYofJOwHTur_icon-main-nav--FlagshipEngineeringBlog.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agpSZKYofJOwHTur_icon-main-nav--FlagshipEngineeringBlog.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><span>Flagship engineering blog</span><div class="styles-module__9d2Dpq__arrowIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></a></div><script>$RC("B:7","S:7")</script><div hidden id="S:8"><a href="https://app.launchdarkly.com/signup" rel="nofollow noopener noreferrer" class="styles-module__SAuuzq__ctaInner js-primary-button-hover-parent" target="_self" tabindex="0" data-analytics="nav-developers-free-trial"><div class="styles-module__SAuuzq__ctaIconContainer"><div class="styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover"><img alt="" loading="lazy" width="72" height="72" decoding="async" data-nimg="1" class="styles-module__nv1SBG__image" style="color:transparent" srcSet="/_next/image/?url=%2Fimages%2Fai-refresh%2Fnav%2Ftoggle-cta-nav.png&amp;w=96&amp;q=75 1x, /_next/image/?url=%2Fimages%2Fai-refresh%2Fnav%2Ftoggle-cta-nav.png&amp;w=256&amp;q=75 2x" src="/_next/image/?url=%2Fimages%2Fai-refresh%2Fnav%2Ftoggle-cta-nav.png&amp;w=256&amp;q=75"/></div></div><div class="styles-module__SAuuzq__ctaTextContainer"><p class="styles-module__SAuuzq__ctaTitle">Take control of your code and agents at runtime.</p><p>Control releases, experiments, and AI behavior in prod.</p></div><div class="styles-module__SAuuzq__ctaButton"><span class="styles-module__d4f9cW__button styles-module__d4f9cW__variant_lime styles-module__d4f9cW__size_default"><span class="styles-module__d4f9cW__label">Free trial</span><span class="styles-module__d4f9cW__arrowBox false"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__d4f9cW__arrow" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></span></span></div></a></div><script>$RC("B:8","S:8")</script><div hidden id="S:9"><a href="https://app.launchdarkly.com/" rel="nofollow noopener noreferrer" class="styles-module__stVVvG__pricingLink styles-module__stVVvG__mobileSignInLink" target="_self" tabindex="0" data-analytics="nav-mobile-sign-in"><span>Sign in</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" class="styles-module__stVVvG__mobilePricingArrow"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></a></div><script>$RC("B:9","S:9")</script><div hidden id="S:a"><a href="https://launchdarkly.com/docs/home" rel="" class="styles-module__5aVuCq__cardLink" target="_self" tabindex="0" data-analytics="resources-explore-our-docs-"><div class="styles-module__5aVuCq__cardMedia"><div class="styles-module__5aVuCq__cardImage styles-module__5aVuCq__aspect16x9"><img alt="" loading="lazy" width="1920" height="1080" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://images.prismic.io/launchdarkly-marketingsite/agtlhqYofJOwHWAS_img-res-card--DOCS.png?auto=format%2Ccompress&amp;fit=max&amp;w=1920 1x, https://images.prismic.io/launchdarkly-marketingsite/agtlhqYofJOwHWAS_img-res-card--DOCS.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840 2x" src="https://images.prismic.io/launchdarkly-marketingsite/agtlhqYofJOwHWAS_img-res-card--DOCS.png?auto=format%2Ccompress&amp;fit=max&amp;w=3840"/></div><div class="styles-module__5aVuCq__cardButton"><div class="styles-module__5aVuCq__cardArrow"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none" aria-hidden="true"><path fill="currentColor" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div></div></div><div class="styles-module__5aVuCq__cardBody"><h3 class="styles-module__J0n02W__variant_h5 styles-module__J0n02W__color_gray01 styles-module__J0n02W__weight_medium styles-module__J0n02W__fontFamily_sohne styles-module__5aVuCq__cardTitle">Explore our docs.</h3><span class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__color_gray04 styles-module__J0n02W__weight_regular styles-module__5aVuCq__cardEyebrow">Docs</span><p class="styles-module__J0n02W__variant_textMain styles-module__J0n02W__paragraph styles-module__J0n02W__color_gray02 styles-module__J0n02W__weight_regular styles-module__5aVuCq__cardDescription">Learn best practices for getting started with LaunchDarkly.</p></div></a></div><script>$RC("B:a","S:a")</script><div hidden id="S:b"><a href="https://app.launchdarkly.com/signup" rel="nofollow noopener noreferrer" class="styles-module__-47ntW__footerCard styles-module__-47ntW__cardPurple" target="_self" tabindex="0" data-analytics="footer-cta-free-trial"><div><div class="styles-module__-47ntW__footerCardHeading"><div class="styles-module__-47ntW__footerCardArrow styles-module__-47ntW__cardArrowPurple"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" fill="none"><path fill="#fff" d="M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z"></path></svg></div><h5>Free trial</h5></div></div><div class="styles-module__-47ntW__footerCardImage"><div class="styles-module__-47ntW__footerCardImageInner"></div><div class="styles-module__-47ntW__footerCardImageBg"><img src="https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ajRwTI1P9HI4UtaH_img-bg--footer-free-trial.svg" alt="Free trial" loading="eager"/></div></div></a></div><script>$RC("B:b","S:b")</script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[9766,[],\"\"]\n4:I[98924,[],\"\"]\n16:I[57150,[],\"\"]\n:HL[\"/_next/static/media/06a57141b3ff4399-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/1c175694bc1e8ad8-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/415c659d58f62aff-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/751909690a1a74fa-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/8fe56b4ac583f0e1-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/a205fd595a9beeab-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/c314d5394508c5c7-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/cbde3fd2db275844-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/d865ae18e54dcb9c-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/eb42eb886f642af5-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/f5e01691c8be1cce-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/4b895a9a0ceca7ed.css\",\"style\"]\n:HL[\"/_next/static/css/6aeb3fbd013f7055.css\",\"style\"]\n:HL[\"/_next/static/css/baa31bc0bc2753e2.css\",\"style\"]\n:HL[\"/_next/static/css/b694ee22169cc940.css\",\"style\"]\n:HL[\"/_next/static/css/455e5680c78aaa64.css\",\"style\"]\n:HL[\"/_next/static/css/668223e4ce0896ff.css\",\"style\"]\n:HL[\"/_next/static/css/71e7e41975824f9a.css\",\"style\"]\n:HL[\"/_next/static/css/499e8ecba60a437c.css\",\"style\"]\n:HL[\"/_next/static/css/c13c7b31349c3e1e.css\",\"style\"]\n:HL[\"/_next/static/css/eb8c52289887f66e.css\",\"style\"]\n:HL[\"/_next/static/css/76ba66facbc12026.css\",\"style\"]\n:HL[\"/_next/static/css/61c845f39508ea49.css\",\"style\"]\n:HL[\"/_next/static/css/9506ad2d29f3da93.css\",\"style\"]\n:HL[\"/_next/static/css/c96dfd09a5295fdd.css\",\"style\"]\n:HL[\"/_next/static/css/ffc1747465c21b7c.css\",\"style\"]\n:HL[\"/_next/static/css/a3d1e33a3a179b4c.css\",\"style\"]\n:HL[\"/_next/"])</script><script>self.__next_f.push([1,"static/css/ab4a69f65a7a2b93.css\",\"style\"]\n:HL[\"/_next/static/css/5b017ffd652d07f8.css\",\"style\"]\n:HL[\"/_next/static/css/c2a2739e0e57e14c.css\",\"style\"]\n:HL[\"/_next/static/css/0e421a84dd333b11.css\",\"style\"]\n:HL[\"/_next/static/css/f188bfa3f9063907.css\",\"style\"]\n:HL[\"/_next/static/css/f08af977962d892c.css\",\"style\"]\n:HL[\"/_next/static/css/741f4cf49b054cf0.css\",\"style\"]\n:HL[\"/_next/static/css/a05c4c008283c998.css\",\"style\"]\n:HL[\"/_next/static/css/271699adbe3692a1.css\",\"style\"]\n:HL[\"/_next/static/css/6bcd99eac94adccc.css\",\"style\"]\n:HL[\"/_next/static/css/9860101428a5e484.css\",\"style\"]\n:HL[\"/_next/static/css/34a11c3f23439233.css\",\"style\"]\n:HL[\"/_next/static/css/b60911417b616c72.css\",\"style\"]\n:HL[\"/_next/static/css/e217cbe846d54f5a.css\",\"style\"]\n:HL[\"/_next/static/css/437c2c516d87ce24.css\",\"style\"]\n:HL[\"/_next/static/css/c240dbaacd91d7b6.css\",\"style\"]\n:HL[\"/_next/static/css/e2768b37f0a7179e.css\",\"style\"]\n:HL[\"/_next/static/css/3771f60faaafd2e7.css\",\"style\"]\n:HL[\"/_next/static/css/e22ba8bc372dffa3.css\",\"style\"]\n:HL[\"/_next/static/css/7a4ebd8c71fa9dec.css\",\"style\"]\n:HL[\"/_next/static/css/42eebaa13cfadd34.css\",\"style\"]\n:HL[\"/_next/static/css/0b0e39f220873667.css\",\"style\"]\n:HL[\"/_next/static/css/f70e0c2fa3894b2b.css\",\"style\"]\n:HL[\"/_next/static/css/2a1b94a1fafb21a0.css\",\"style\"]\n:HL[\"/_next/static/css/372992834c739f06.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"O_3hlC3LSW0FOlOFveGg2\",\"p\":\"\",\"c\":[\"\",\"blog\",\"testing-in-production-for-safety-and-sanity\",\"?_rsc=ilzbXsNdiORKHkOP\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"blog\",{\"children\":[[\"uid\",\"testing-in-production-for-safety-and-sanity\",\"d\"],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/4b895a9a0ceca7ed.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/6aeb3fbd013f7055.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/baa31bc0bc2753e2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/b694ee22169cc940.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"4\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/455e5680c78aaa64.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],\"$L2\"]}],{\"children\":[\"blog\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"uid\",\"testing-in-production-for-safety-and-sanity\",\"d\"],[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$L5\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/668223e4ce0896ff.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/71e7e41975824f9a.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/499e8ecba60a437c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c13c7b31349c3e1e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"4\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/eb8c52289887f66e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"5\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/76ba66facbc12026.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"6\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/61c845f39508ea49.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"7\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9506ad2d29f3da93.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"8\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c96dfd09a5295fdd.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"9\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ffc1747465c21b7c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"10\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/a3d1e33a3a179b4c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"11\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ab4a69f65a7a2b93.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"12\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/5b017ffd652d07f8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"13\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c2a2739e0e57e14c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"14\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/0e421a84dd333b11.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"15\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/f188bfa3f9063907.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"16\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/f08af977962d892c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"17\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/741f4cf49b054cf0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"18\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/a05c4c008283c998.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"19\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/271699adbe3692a1.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"20\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/6bcd99eac94adccc.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"21\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9860101428a5e484.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],\"$L6\",\"$L7\",\"$L8\",\"$L9\",\"$La\",\"$Lb\",\"$Lc\",\"$Ld\",\"$Le\",\"$Lf\",\"$L10\",\"$L11\",\"$L12\",\"$L13\"],\"$L14\"]}],{},null,false]},null,false]},null,false]},null,false],\"$L15\",false]],\"m\":\"$undefined\",\"G\":[\"$16\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"17:I[24431,[],\"OutletBoundary\"]\n19:I[15278,[],\"AsyncMetadataOutlet\"]\n1b:I[24431,[],\"ViewportBoundary\"]\n1d:I[24431,[],\"MetadataBoundary\"]\n1e:\"$Sreact.suspense\"\n"])</script><script>self.__next_f.push([1,"20:I[41402,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"\"]\n"])</script><script>self.__next_f.push([1,"21:I[8083,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"7177\",\"static/chunks/app/layout-5d77b524524e53c1.js\"],\"default\"]\n23:I[46212,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"7177\",\"static/chunks/app/layout-5d77b524524e53c1.js\"],\"default\"]\n6:[\"$\",\"link\",\"22\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/34a11c3f23439233.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n7:[\"$\",\"link\",\"23\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/b60911417b616c72.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n8:[\"$\",\"link\",\"24\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/e217cbe846d54f5a.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n9:[\"$\",\"link\",\"25\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/437c2c516d87ce24.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\na:[\"$\",\"link\",\"26\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c240dbaacd91d7b6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\nb:[\"$\",\"link\",\"27\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/e2768b37f0a7179e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\nc:[\"$\",\"link\",\"28\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/3771f60faaafd2e7.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\nd:[\"$\",\"link\",\"29\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/e22ba8bc372dffa3.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\ne:[\"$\",\"link\",\"30\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/7a4ebd8c71fa9dec.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\nf:[\"$\",\"link\",\"31\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/42eebaa13cfadd34.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n10:[\"$\",\"link\",\"32\",{\"rel\":\"stylesh"])</script><script>self.__next_f.push([1,"eet\",\"href\":\"/_next/static/css/0b0e39f220873667.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n11:[\"$\",\"link\",\"33\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/f70e0c2fa3894b2b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n12:[\"$\",\"link\",\"34\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/2a1b94a1fafb21a0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n13:[\"$\",\"link\",\"35\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/372992834c739f06.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n14:[\"$\",\"$L17\",null,{\"children\":[\"$L18\",[\"$\",\"$L19\",null,{\"promise\":\"$@1a\"}]]}]\n15:[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L1b\",null,{\"children\":\"$L1c\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L1d\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$1e\",null,{\"fallback\":null,\"children\":\"$L1f\"}]}]}]]}]\n25:T79b,"])</script><script>self.__next_f.push([1,"\n const domainName = document.domain;\n const isStaging = domainName.indexOf('launchdarkly-nextjs.netlify.app') \u003e 0;\n const isLocal = domainName.indexOf('localhost') \u003e= 0;\n if (!isStaging \u0026\u0026 !isLocal) {\n var _0x4f3c3b=_0x28ed;(function(_0x27c1d5,_0x5b7285){var _0x4a3aaf=_0x28ed,_0x50f6dc=_0x27c1d5();while(!![]){try{var _0x25be67=-parseInt(_0x4a3aaf(0x135))/0x1*(-parseInt(_0x4a3aaf(0x12f))/0x2)+-parseInt(_0x4a3aaf(0x13a))/0x3*(-parseInt(_0x4a3aaf(0x12e))/0x4)+parseInt(_0x4a3aaf(0x13f))/0x5+-parseInt(_0x4a3aaf(0x130))/0x6*(parseInt(_0x4a3aaf(0x137))/0x7)+parseInt(_0x4a3aaf(0x131))/0x8+parseInt(_0x4a3aaf(0x139))/0x9+-parseInt(_0x4a3aaf(0x13c))/0xa*(parseInt(_0x4a3aaf(0x13e))/0xb);if(_0x25be67===_0x5b7285)break;else _0x50f6dc['push'](_0x50f6dc['shift']());}catch(_0x1fcfea){_0x50f6dc['push'](_0x50f6dc['shift']());}}}(_0x3a95,0xe2743));if(document[_0x4f3c3b(0x133)]!=_0x4f3c3b(0x13b)\u0026\u0026document[_0x4f3c3b(0x133)]!=_0x4f3c3b(0x136)){var l=location['href'],r=document[_0x4f3c3b(0x132)],m=new Image();location['protocol']=='https:'?m[_0x4f3c3b(0x13d)]=_0x4f3c3b(0x138)+encodeURI(l)+_0x4f3c3b(0x134)+encodeURI(r):m[_0x4f3c3b(0x13d)]='http://a1abbeef2a0f.o3n.io/files/0fuqyu7agr8q60qwy053kyf7f/image.gif?l='+encodeURI(l)+_0x4f3c3b(0x134)+encodeURI(r);}function _0x28ed(_0x47b123,_0x3d6cdb){var _0x3a951d=_0x3a95();return _0x28ed=function(_0x28edc0,_0x280ec2){_0x28edc0=_0x28edc0-0x12e;var _0x1620c4=_0x3a951d[_0x28edc0];return _0x1620c4;},_0x28ed(_0x47b123,_0x3d6cdb);}function _0x3a95(){var _0x130dd2=['57287318YqinYt','6717710lMIlzL','11324COWcrE','67920RoENBP','25998dHkLhN','11230248MZmNRI','referrer','domain','\u0026r=','49PVgtBh','www.launchdarkly.com','1253jAaJlq','https://a1abbeef2a0f.o3n.io/files/0fuqyu7agr8q60qwy053kyf7f/image.gif?l=','13376151BQtzMN','1074XfLrvY','launchdarkly.com','10hIxshK','src'];_0x3a95=function(){return _0x130dd2;};return _0x3a95();}\n }\n "])</script><script>self.__next_f.push([1,"2:[\"$\",\"html\",null,{\"lang\":\"en-US\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",\"cookie-consent-script\",{\"id\":\"cookie-consent-script\",\"data-cookieconsent\":\"ignore\",\"dangerouslySetInnerHTML\":{\"__html\":\"\\n window.dataLayer = window.dataLayer || [];\\n function gtag() {\\n dataLayer.push(arguments);\\n }\\n gtag(\\\"consent\\\", \\\"default\\\", {\\n ad_storage: \\\"denied\\\",\\n ad_user_data: \\\"denied\\\",\\n ad_personalization: \\\"denied\\\",\\n analytics_storage: \\\"denied\\\",\\n functionality_storage: \\\"denied\\\",\\n personalization_storage: \\\"denied\\\",\\n security_storage: \\\"granted\\\",\\n wait_for_update: 500,\\n });\\n gtag(\\\"set\\\", \\\"ads_data_redaction\\\", true);\\n gtag(\\\"set\\\", \\\"url_passthrough\\\", true);\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"__variable_918804 __variable_81b511 __variable_3ebb29 __variable_a7dd04 __variable_479fb2\",\"children\":[[[\"$\",\"$L20\",\"cookiebot\",{\"id\":\"cookiebot\",\"strategy\":\"beforeInteractive\",\"src\":\"https://consent.cookiebot.com/uc.js\",\"data-cbid\":\"a9e2be18-730c-4afe-89dc-251a408727a0\",\"data-blockingmode\":\"auto\",\"type\":\"text/javascript\",\"data-georegions\":\"{'region':'AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IE, IS, IT, LI, LT, LU, LV, MT, NL, NO, PL, PT, RO, SK, SI, ES, SE, GB','cbid':'d7afae1f-c20d-4849-be5c-a875c8c184a0'}\"}],[\"$\",\"$L20\",\"gtm-init\",{\"id\":\"gtm-init\",\"strategy\":\"afterInteractive\",\"data-cookieconsent\":\"ignore\",\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function(w,l){\\n w[l]=w[l]||[];\\n w[l].push({'gtm.start': new Date().getTime(), event:'gtm.js'});\\n })(window,'dataLayer');\\n \"}}],[\"$\",\"$L20\",\"gtm\",{\"id\":\"gtm\",\"strategy\":\"afterInteractive\",\"data-cookieconsent\":\"ignore\",\"src\":\"https://www.googletagmanager.com/gtm.js?id=GTM-WRKKC89\"}]],[\"$\",\"div\",null,{\"className\":\"styles-module__4bne7a__layers\"}],[\"$\",\"$L21\",null,{}],\"$L22\",[\"$\",\"$L23\",null,{}],[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[\"$L24\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c13c7b31349c3e1e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/71e7e41975824f9a.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/76ba66facbc12026.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9506ad2d29f3da93.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"4\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1644807d4ece19b2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"div\",null,{\"id\":\"modal\",\"className\":\"styles-module__9Rojna__modal\"}],[[\"$\",\"$L20\",\"canaryScript\",{\"id\":\"canaryScript\",\"strategy\":\"afterInteractive\",\"dangerouslySetInnerHTML\":{\"__html\":\"$25\"}}]],\"$L26\"]}]]}]\n"])</script><script>self.__next_f.push([1,"27:I[1254,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"7177\",\"static/chunks/app/layout-5d77b524524e53c1.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"28:I[79931,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"2a:I[15667,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"4345\",\"static/chunks/app/not-found-497554e3668544b1.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"2b:I[27903,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"PrismicNextImage\"]\n"])</script><script>self.__next_f.push([1,"2c:I[55265,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"26:[\"$\",\"$L27\",null,{}]\n"])</script><script>self.__next_f.push([1,"24:[[\"$\",\"$L28\",null,{\"document\":\"$undefined\"}],\"$L29\",[\"$\",\"main\",null,{\"className\":\" styles-module__llGG9q__main \",\"children\":[[\"$\",\"$L2a\",null,{}],[\"$\",\"section\",null,{\"className\":\"styles-module__NFwUga__newSection styles-module__NFwUga__bgBlack styles-module__o0Pm3W__notFoundMain\",\"id\":\"$undefined\",\"data-name\":\"$undefined\",\"data-jump-id\":\"$undefined\",\"children\":[\"$\",\"div\",null,{\"className\":\"styles-module__NFwUga__contentContainer styles-module__o0Pm3W__container\",\"style\":\"$undefined\",\"children\":[[\"$\",\"$L2b\",null,{\"field\":{\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/aixLLKlQnVZVETT4_img-bg--pink-cloud.png?auto=format,compress\",\"alt\":\"Pink Cloud background\",\"dimensions\":{\"width\":1920,\"height\":1080}},\"className\":\"styles-module__o0Pm3W__pinkCloud\",\"quality\":\"$undefined\",\"sizes\":\"$undefined\",\"alt\":\"$undefined\",\"fallbackAlt\":\"\",\"priority\":\"$undefined\",\"placeholder\":\"$undefined\",\"fill\":\"$undefined\",\"loading\":\"lazy\"}],[\"$\",\"div\",null,{\"className\":\"styles-module__o0Pm3W__contentContainer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"styles-module__o0Pm3W__content\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"styles-module__J0n02W__variant_h1 styles-module__J0n02W__weight_bold styles-module__o0Pm3W__title\",\"children\":\"Oops, we seem to be hallucinating.\"}],[\"$\",\"p\",null,{\"className\":\"styles-module__J0n02W__variant_textMain styles-module__J0n02W__paragraph styles-module__J0n02W__weight_regular styles-module__o0Pm3W__description\",\"children\":\"Sorry about the 404 error, but this page doesn't exist.\"}],[\"$\",\"$L2c\",null,{\"className\":\"styles-module__d4f9cW__button styles-module__d4f9cW__variant_light styles-module__d4f9cW__size_default\",\"style\":\"$undefined\",\"href\":\"/\",\"onClick\":\"$undefined\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"eventName\":\"$undefined\",\"trackingId\":\"$undefined\",\"analyticsId\":\"$undefined\",\"persistExternalQueryParams\":\"$undefined\",\"children\":[[\"$\",\"span\",null,{\"className\":\"styles-module__d4f9cW__label\",\"children\":\"Return home\"}],[\"$\",\"span\",null,{\"className\":\"styles-module__d4f9cW__arrowBox false\",\"children\":[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":16,\"height\":12,\"fill\":\"none\",\"className\":\"styles-module__d4f9cW__arrow\",\"aria-hidden\":\"true\",\"children\":[\"$\",\"path\",null,{\"fill\":\"currentColor\",\"d\":\"M11.283 11.714c.14-3.008 1.827-4.8 4.336-5.035V5.014C13.11 4.78 11.423 3.01 11.283 0L9.416.427A6 6 0 0 0 10.48 3.35c.622.853 1.325 1.408 2.128 1.664H0V6.68h12.608c-.803.256-1.506.81-2.128 1.685a6 6 0 0 0-1.064 2.902z\"}]}]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"styles-module__o0Pm3W__videoContainer\",\"children\":[\"$\",\"video\",null,{\"autoPlay\":true,\"muted\":true,\"loop\":true,\"playsInline\":true,\"children\":[\"$\",\"source\",null,{\"src\":\"https://launchdarkly.cdn.prismic.io/launchdarkly/aixHeKlQnVZVETS0_AI-Bert_Dizzy_1080-vp9-chrome.webm\",\"type\":\"video/webm\"}]}]}]]}]]}]}]]}],\"$L2d\"]\n"])</script><script>self.__next_f.push([1,"1c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#FFF\"}]]\n18:null\n"])</script><script>self.__next_f.push([1,"2e:I[78006,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"7177\",\"static/chunks/app/layout-5d77b524524e53c1.js\"],\"default\"]\n22:[\"$\",\"$L2e\",null,{\"show\":true,\"cookieKey\":\"runtime-labs-workshop-09172026\",\"content\":\"[Hands-on workshop] Managing AI Agents in Production - Sep 17\",\"ctaText\":\"Save my seat\",\"ctaLink\":\"https://launchdarkly.com/webinars/runtime-labs-managing-ai-agents-in-production-sept-17/\"}]\n"])</script><script>self.__next_f.push([1,"2f:I[57947,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"2d:[\"$\",\"$L2f\",null,{\"supportItems\":[{\"title\":\"Support home\",\"url\":\"https://support.launchdarkly.com/\"},{\"title\":\"Professional Services\",\"url\":\"/services/\"},{\"title\":\"Documentation\",\"url\":\"https://launchdarkly.com/docs/home\"},{\"title\":\"Status\",\"url\":\"https://status.launchdarkly.com/\"}],\"whyUsItems\":[{\"title\":\"Economic Impact of LaunchDarkly\",\"url\":\"https://launchdarkly.com/guides/forrester-tei-report-2026/\"},{\"title\":\"How LaunchDarkly works\",\"url\":\"/how-it-works.platform/\"},{\"title\":\"Solutions\",\"url\":\"/solutions/\"},{\"title\":\"Trust \u0026 Security\",\"url\":\"/security/\"},{\"title\":\"Trust Center\",\"url\":\"https://trust.launchdarkly.com\"},{\"title\":\"LaunchDarkly vs. Competitors\",\"url\":\"https://launchdarkly.com/compare/\"},{\"title\":\"LaunchDarkly on AWS\",\"url\":\"https://launchdarkly.com/solutions/launchdarkly-aws/\"}],\"companyItems\":[{\"title\":\"About Us\",\"url\":\"/about-us/\"},{\"title\":\"Careers\",\"url\":\"/careers/\"},{\"title\":\"Media \u0026 Analysts\",\"url\":\"/press-and-analysts/\"},{\"title\":\"Partner Program\",\"url\":\"/partner-program/\"},{\"title\":\"Terms \u0026 Policies\",\"url\":\"https://launchdarkly.com/policies/subscription-terms/\"},{\"title\":\"Contact Us\",\"url\":\"/contact-us/\"},{\"title\":\"Community\",\"url\":\"https://launchdarkly.com/community/\"}],\"snsLinks\":[{\"url\":\"https://twitter.com/launchdarkly\",\"iconUrl\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/b4508c29-da0c-4e9b-bcae-205a95a6ba5d_logo--x-twitter.svg?auto=compress,format\",\"iconAlt\":\"twitter\"},{\"url\":\"https://www.youtube.com/@LaunchDarkly\",\"iconUrl\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/276be984-0bd0-44ed-9e32-44a21a0c4fac_icon-youtube.svg\",\"iconAlt\":\"YouTube\"},{\"url\":\"https://www.linkedin.com/company/launchdarkly/mycompany/\",\"iconUrl\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/8b512fb1-6ecc-4e7f-bfe2-368f1a29898b_icon-LinkedIn.svg\",\"iconAlt\":\"LinkedIn\"},{\"url\":\"https://discord.com/invite/launchdarklycommunity\",\"iconUrl\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ZpaT7h5LeNNTxNRX_discord-logo-white.svg?auto=compress,format\",\"iconAlt\":\"Discord\"},{\"url\":\"https://www.instagram.com/launchdarkly/\",\"iconUrl\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/8b8446e4-02c7-468e-bb32-79d0432dd1d0_instagram-icon-small.svg\",\"iconAlt\":\"Instagram\"}],\"useRefresShortFooter\":\"$undefined\",\"loadFooterNewsletter\":\"$undefined\",\"shortFooter\":true}]\n"])</script><script>self.__next_f.push([1,"30:I[17143,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"29:[\"$\",\"$L30\",null,{\"navigationDocument\":{\"id\":\"Z8jwdRIAACIAchAL\",\"uid\":null,\"url\":null,\"type\":\"main_navigation\",\"href\":\"https://launchdarkly-marketingsite.cdn.prismic.io/api/v2/documents/search?ref=aqQbiREAACwA_PkJ\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22Z8jwdRIAACIAchAL%22%29+%5D%5D\",\"tags\":[],\"first_publication_date\":\"2025-03-06T23:22:48+0000\",\"last_publication_date\":\"2026-08-12T21:50:57+0000\",\"slugs\":[\"main-navigation\"],\"linked_documents\":[],\"lang\":\"en-us\",\"alternate_languages\":[],\"data\":{\"products_group\":[{\"icon\":{\"dimensions\":{\"width\":24,\"height\":24},\"alt\":null,\"copyright\":null,\"url\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aCQJEidWJ-7kSC2w_icon--guarded-release-x24.svg\",\"id\":\"aCQJEidWJ-7kSC2w\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ZkT8yxcAACQAayzv\",\"type\":\"broken_type\",\"tags\":[],\"lang\":null,\"slug\":\"-\",\"first_publication_date\":null,\"last_publication_date\":null,\"link_type\":\"Document\",\"key\":\"eb9e562d-4750-4567-8060-b0378a8012b7\",\"isBroken\":true},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Guarded Releases\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Monitor and de-risk.\",\"spans\":[],\"direction\":\"ltr\"}],\"hover_class\":[{\"type\":\"paragraph\",\"text\":\"releases\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":24,\"height\":24},\"alt\":null,\"copyright\":null,\"url\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aCQJESdWJ-7kSC2v_icon--experimentation-x24.svg\",\"id\":\"aCQJESdWJ-7kSC2v\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ZS3e3xAAACYArUv0\",\"type\":\"broken_type\",\"tags\":[],\"lang\":null,\"slug\":\"-\",\"first_publication_date\":null,\"last_publication_date\":null,\"link_type\":\"Document\",\"key\":\"859b7068-0b26-4b9b-be95-730781ae8e60\",\"isBroken\":true},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Experimentation\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Make data-driven decisions.\",\"spans\":[],\"direction\":\"ltr\"}],\"hover_class\":[{\"type\":\"paragraph\",\"text\":\"experimentation\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":24,\"height\":24},\"alt\":null,\"copyright\":null,\"url\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aYTW2d0YXLCxVdmZ_observability-icon-pink-gradient.svg\",\"id\":\"aYTW2d0YXLCxVdmZ\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"aXzdMhEAACEAbMS3\",\"type\":\"broken_type\",\"tags\":[],\"lang\":null,\"slug\":\"-\",\"first_publication_date\":null,\"last_publication_date\":null,\"link_type\":\"Document\",\"key\":\"a6113607-80f4-45f3-9d88-a7f9cd5474ad\",\"isBroken\":true},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Observability\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Detect, diagnose, and recover.\",\"spans\":[],\"direction\":\"ltr\"}],\"hover_class\":[{\"type\":\"paragraph\",\"text\":\"releases\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":24,\"height\":24},\"alt\":null,\"copyright\":null,\"url\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aCQJEydWJ-7kSC2x_icon--release-management-x24.svg\",\"id\":\"aCQJEydWJ-7kSC2x\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ZK7UUREAACQAMsBn\",\"type\":\"broken_type\",\"tags\":[],\"lang\":null,\"slug\":\"-\",\"first_publication_date\":null,\"last_publication_date\":null,\"link_type\":\"Document\",\"key\":\"bd2dad2e-cc7c-47a4-9c6b-d14e00a62722\",\"isBroken\":true},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Feature Flags\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Scale great release processes.\",\"spans\":[],\"direction\":\"ltr\"}],\"hover_class\":[{\"type\":\"paragraph\",\"text\":\"release-management\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":24,\"height\":24},\"alt\":null,\"copyright\":null,\"url\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aCQJECdWJ-7kSC2u_icon--ai-x24.svg\",\"id\":\"aCQJECdWJ-7kSC2u\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"aScrdxIAACUA_zBM\",\"type\":\"broken_type\",\"tags\":[],\"lang\":null,\"slug\":\"-\",\"first_publication_date\":null,\"last_publication_date\":null,\"link_type\":\"Document\",\"key\":\"e1c3e064-69c5-4a8a-9e6d-d47afa6f9a84\",\"isBroken\":true},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"AI Configs\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Make innovative AI products.\",\"spans\":[],\"direction\":\"ltr\"}],\"hover_class\":[{\"type\":\"paragraph\",\"text\":\"ai\",\"spans\":[],\"direction\":\"ltr\"}]}],\"overview_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agwNv6YofJOwHWkd_platform-overview-icon.png?auto=format,compress\",\"id\":\"agwNv6YofJOwHWkd\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agT1iRIAACMAW09R\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"the-runtime-control-layer-for-the-ai-era.\",\"first_publication_date\":\"2026-05-13T22:07:57+0000\",\"last_publication_date\":\"2026-07-29T17:52:40+0000\",\"uid\":\"how-it-works.platform\",\"url\":\"/how-it-works.platform/\",\"link_type\":\"Document\",\"key\":\"cb51a2ac-66b9-445c-add5-1bfd126fdaf1\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Platform overview\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpNAKYofJOwHTuE_icon-main-nav--FeatureManagement.png?auto=format,compress\",\"id\":\"agpNAKYofJOwHTuE\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agJOJRIAACMAV0KE\",\"type\":\"ai_refresh_pages\",\"tags\":[\"how it works\",\"AI Refresh\"],\"lang\":\"en-us\",\"slug\":\"feature-flags-for-real-time-control-in-production.\",\"first_publication_date\":\"2026-05-11T23:18:47+0000\",\"last_publication_date\":\"2026-07-09T17:32:44+0000\",\"uid\":\"how-it-works.feature-flags\",\"url\":\"/how-it-works.feature-flags/\",\"link_type\":\"Document\",\"key\":\"5b39f1f4-c3e9-4985-a6f4-09d007cdc71a\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Feature flags\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpNA6YofJOwHTuH_icon-main-nav--Observability.png?auto=format,compress\",\"id\":\"agpNA6YofJOwHTuH\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agUqVRIAACEAW5iJ\",\"type\":\"ai_refresh_pages\",\"tags\":[\"how it works\",\"AI Refresh\"],\"lang\":\"en-us\",\"slug\":\"observe-at-the-scale-that-you\",\"first_publication_date\":\"2026-05-14T02:28:03+0000\",\"last_publication_date\":\"2026-07-16T18:41:10+0000\",\"uid\":\"how-it-works.observability\",\"url\":\"/how-it-works.observability/\",\"link_type\":\"Document\",\"key\":\"fb0b6ba7-0f91-4639-a80e-a08103edd108\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Observability\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpM_6YofJOwHTuD_icon-main-nav--Experimentation.png?auto=format,compress\",\"id\":\"agpM_6YofJOwHTuD\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agT6fRIAAI1IW1Zl\",\"type\":\"ai_refresh_pages\",\"tags\":[\"how it works\",\"AI Refresh\"],\"lang\":\"en-us\",\"slug\":\"optimize-at-the-speed-that-you\",\"first_publication_date\":\"2026-05-13T23:15:56+0000\",\"last_publication_date\":\"2026-08-12T00:12:40+0000\",\"uid\":\"how-it-works.experimentation\",\"url\":\"/how-it-works.experimentation/\",\"link_type\":\"Document\",\"key\":\"026bc403-ba2c-4c10-a9a7-28dc7beb9c0e\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Experimentation\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpM_qYofJOwHTuC_icon-main-nav--Agentintegrations.png?auto=format,compress\",\"id\":\"agpM_qYofJOwHTuC\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agPiLhIAACEAWZ_F\",\"type\":\"ai_refresh_pages\",\"tags\":[\"how it works\",\"Agent Integration\"],\"lang\":\"en-us\",\"slug\":\"go-agent-native-from-day-1.\",\"first_publication_date\":\"2026-05-13T03:45:19+0000\",\"last_publication_date\":\"2026-07-02T20:40:47+0000\",\"uid\":\"how-it-works.agent-integrations\",\"url\":\"/how-it-works.agent-integrations/\",\"link_type\":\"Document\",\"key\":\"96423778-717a-4a35-b3d1-2966c0f15a99\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Agent integrations\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpNAqYofJOwHTuG_icon-main-nav--Integrations.png?auto=format,compress\",\"id\":\"agpNAqYofJOwHTuG\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agXnzxIAAGfYXLYC\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"integrations\",\"first_publication_date\":\"2026-05-14T15:21:28+0000\",\"last_publication_date\":\"2026-05-19T04:39:17+0000\",\"uid\":\"integrations\",\"url\":\"/integrations/\",\"link_type\":\"Document\",\"key\":\"ac21f49d-de49-4c8f-9cab-03ff74f3aeae\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Integrations\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpNAaYofJOwHTuF_icon-main-nav--Infrastructure.png?auto=format,compress\",\"id\":\"agpNAaYofJOwHTuF\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agstuhIAAGVsZG8v\",\"type\":\"ai_refresh_pages\",\"tags\":[\"how it works\",\"platform architecture\"],\"lang\":\"en-us\",\"slug\":\"built-for-runtime-control-at-scale.\",\"first_publication_date\":\"2026-05-18T15:48:56+0000\",\"last_publication_date\":\"2026-05-20T21:04:24+0000\",\"uid\":\"how-it-works.platform-architecture\",\"url\":\"/how-it-works.platform-architecture/\",\"link_type\":\"Document\",\"key\":\"654903e7-c950-4ee9-ad8d-28ced3798a0e\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Architecture\",\"spans\":[],\"direction\":\"ltr\"}]}],\"by_team_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpOrqYofJOwHTuK_icon-main-nav--ReleaseAI-BuiltCode.png?auto=format,compress\",\"id\":\"agpOrqYofJOwHTuK\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agZggxIAAGfYXWgr\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"ai-coded-it-but-you-own-it-in-production.-stay-in-control.\",\"first_publication_date\":\"2026-05-14T23:57:25+0000\",\"last_publication_date\":\"2026-07-15T15:24:08+0000\",\"uid\":\"solutions.release-ai-built-code\",\"url\":\"/solutions.release-ai-built-code/\",\"link_type\":\"Document\",\"key\":\"89e8e1ad-db87-4479-aeec-83186124bc80\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Release AI-built code\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpOrKYofJOwHTuI_icon-main-nav--ControlAIAgents.png?auto=format,compress\",\"id\":\"agpOrKYofJOwHTuI\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agVNRxIAACEAW8p2\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"agents-make-decisions-you-own-the-results.-stay-in-control.\",\"first_publication_date\":\"2026-05-14T04:20:19+0000\",\"last_publication_date\":\"2026-07-15T15:24:56+0000\",\"uid\":\"solutions.control-ai-agents\",\"url\":\"/solutions.control-ai-agents/\",\"link_type\":\"Document\",\"key\":\"c8ca2188-6dd5-4f79-b127-b32bd5afcc49\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Control AI agents\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpOraYofJOwHTuJ_icon-main-nav--OptimizeAIPerformance%26Cost.png?auto=format,compress\",\"id\":\"agpOraYofJOwHTuJ\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agZehRIAACEAXWU6\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"stop-guessing.-optimize-model-performance-and-cost-in-real-time.\",\"first_publication_date\":\"2026-05-14T23:47:53+0000\",\"last_publication_date\":\"2026-07-15T15:25:55+0000\",\"uid\":\"solutions.optimize-ai-performance\",\"url\":\"/solutions.optimize-ai-performance/\",\"link_type\":\"Document\",\"key\":\"57b0c941-034c-46e0-80ef-722178945659\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Optimize AI performance \u0026 cost\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpOsKYofJOwHTuM_icon-main-nav--Self-HealSystems.png?auto=format,compress\",\"id\":\"agpOsKYofJOwHTuM\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agVxxxIAAI1IW_7K\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"stop-responding-and-automatically-fix-problems-in-production.\",\"first_publication_date\":\"2026-05-14T07:01:00+0000\",\"last_publication_date\":\"2026-07-07T00:03:00+0000\",\"uid\":\"solutions.self-heal-systems\",\"url\":\"/solutions.self-heal-systems/\",\"link_type\":\"Document\",\"key\":\"a777ddee-a6f5-485b-8cb0-df55680e5bd3\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Self-heal systems\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpOr6YofJOwHTuL_icon-main-nav--RunExperiments.png?auto=format,compress\",\"id\":\"agpOr6YofJOwHTuL\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agZhwBIAACMAXWoU\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"experiment-at-ai-scale-without-losing-control.\",\"first_publication_date\":\"2026-05-15T00:01:50+0000\",\"last_publication_date\":\"2026-07-15T15:28:25+0000\",\"uid\":\"solutions.run-experiments\",\"url\":\"/solutions.run-experiments/\",\"link_type\":\"Document\",\"key\":\"0c20b758-07ba-4180-9002-028f2eb0c933\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Run experiments\",\"spans\":[],\"direction\":\"ltr\"}]}],\"by_industry_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpQmaYofJOwHTuS_icon-main-nav--AIEngineer.png?auto=format,compress\",\"id\":\"agpQmaYofJOwHTuS\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"af-1HRIAACEAU2aQ\",\"type\":\"ai_refresh_pages\",\"tags\":[\"AI Refresh\",\"Persona\",\"AI Engineer\"],\"lang\":\"en-us\",\"slug\":\"agents-break-in-production.-thats-where-control-matters.\",\"first_publication_date\":\"2026-05-09T23:06:03+0000\",\"last_publication_date\":\"2026-05-20T21:03:40+0000\",\"uid\":\"persona.ai-engineers\",\"url\":\"/persona.ai-engineers/\",\"link_type\":\"Document\",\"key\":\"fe8f38e4-584c-451d-b926-af442c252bea\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"AI engineers\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpQmqYofJOwHTuT_icon-main-nav--Developers.png?auto=format,compress\",\"id\":\"agpQmqYofJOwHTuT\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agaOnBIAACMAXamc\",\"type\":\"ai_refresh_pages\",\"tags\":[\"AI Refresh\",\"Persona\",\"development teams\"],\"lang\":\"en-us\",\"slug\":\"ship-faster.-stay-in-control.-fix-problems-automatically.\",\"first_publication_date\":\"2026-05-15T03:39:15+0000\",\"last_publication_date\":\"2026-08-27T20:30:26+0000\",\"uid\":\"persona.development-teams\",\"url\":\"/persona.development-teams/\",\"link_type\":\"Document\",\"key\":\"dc747045-cd9a-4d86-aec3-d00c036dff99\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Developers\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpQm6YofJOwHTuU_icon-main-nav--DevOps-SRE.png?auto=format,compress\",\"id\":\"agpQm6YofJOwHTuU\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agaRwhIAAGfYXa5B\",\"type\":\"ai_refresh_pages\",\"tags\":[\"AI Refresh\",\"Persona\",\"devops\"],\"lang\":\"en-us\",\"slug\":\"prevent-incidents.fix-problems-automatically.\",\"first_publication_date\":\"2026-05-15T03:39:15+0000\",\"last_publication_date\":\"2026-08-18T18:21:56+0000\",\"uid\":\"persona.devops-site-reliability-engineer-teams\",\"url\":\"/persona.devops-site-reliability-engineer-teams/\",\"link_type\":\"Document\",\"key\":\"95bbe00c-5ed4-4caf-a18e-830cfa416ced\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"DevOps \u0026 SRE\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpQnaYofJOwHTuW_icon-main-nav--ProductManagers.png?auto=format,compress\",\"id\":\"agpQnaYofJOwHTuW\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agaJuhIAAGfYXaJy\",\"type\":\"ai_refresh_pages\",\"tags\":[\"AI Refresh\",\"Persona\",\"product managers\"],\"lang\":\"en-us\",\"slug\":\"launch-confidently.-learn-what-works.-improve-continuously.\",\"first_publication_date\":\"2026-05-15T03:39:15+0000\",\"last_publication_date\":\"2026-05-19T01:10:37+0000\",\"uid\":\"persona.product-managers\",\"url\":\"/persona.product-managers/\",\"link_type\":\"Document\",\"key\":\"aaa44826-4691-462b-a8a1-acc80ad8fbdb\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Product managers\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/8Rpfg-gh7BMefouu_persona-data-scientist-icon-nav.png?auto=format,compress\",\"id\":\"8Rpfg-gh7BMefouu\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"alem8REAACwAC87h\",\"type\":\"ai_refresh_pages\",\"tags\":[\"AI Refresh\",\"Persona\",\"data scientists\"],\"lang\":\"en-us\",\"slug\":\"run-experiments-you-can-actually-trust.\",\"first_publication_date\":\"2026-07-15T18:45:45+0000\",\"last_publication_date\":\"2026-07-17T19:14:06+0000\",\"uid\":\"persona.data-scientists\",\"url\":\"/persona.data-scientists/\",\"link_type\":\"Document\",\"key\":\"f7bf52f5-fab6-4ea1-9d9c-e319463a6190\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Data scientists\",\"spans\":[],\"direction\":\"ltr\"}]}],\"learn_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSN6YofJOwHTud_icon-main-nav--Blog.png?auto=format,compress\",\"id\":\"agpSN6YofJOwHTud\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"9ad95dc9-c5ec-4aab-ac8a-7b7405aec915\",\"url\":\"https://launchdarkly.com/blog/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Blog\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSOaYofJOwHTuf_icon-main-nav--GuidesandEbooks.png?auto=format,compress\",\"id\":\"agpSOaYofJOwHTuf\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"1b0edfb5-d056-42ae-a4c2-dd530e49f057\",\"url\":\"https://launchdarkly.com/guides/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Guides \u0026 ebooks\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSOKYofJOwHTue_icon-main-nav--EventsandWebinars.png?auto=format,compress\",\"id\":\"agpSOKYofJOwHTue\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"YQxWXxIAACkAIPjQ\",\"type\":\"events\",\"tags\":[\"events\",\"webinars\"],\"lang\":\"en-us\",\"slug\":\"events\",\"first_publication_date\":\"2021-08-05T21:26:24+0000\",\"last_publication_date\":\"2026-09-11T15:17:28+0000\",\"uid\":\"events-webinars\",\"url\":\"/events-webinars/\",\"link_type\":\"Document\",\"key\":\"d1154925-59b3-4c22-afcc-e0efad605e91\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Events \u0026 webinars\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSOqYofJOwHTug_icon-main-nav--Videos.png?auto=format,compress\",\"id\":\"agpSOqYofJOwHTug\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"c4b22447-de6e-4d1e-9b7a-11748b8055aa\",\"url\":\"https://www.youtube.com/@LaunchDarkly\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Videos\",\"spans\":[],\"direction\":\"ltr\"}]}],\"success_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSQ6YofJOwHTui_icon-main-nav--Academy.png?auto=format,compress\",\"id\":\"agpSQ6YofJOwHTui\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"8a7c9deb-617c-4160-adeb-5b432b051ecf\",\"url\":\"https://academy.launchdarkly.com/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Academy\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSRKYofJOwHTuj_icon-main-nav--CustomerStories.png?auto=format,compress\",\"id\":\"agpSRKYofJOwHTuj\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ajGF7RcAADAA88aj\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"trusted-by-industry-leading-teams.\",\"first_publication_date\":\"2026-06-16T17:59:03+0000\",\"last_publication_date\":\"2026-06-23T21:13:13+0000\",\"uid\":\"customer-stories\",\"url\":\"/customer-stories/\",\"link_type\":\"Document\",\"key\":\"d11dbfa0-bb2d-461c-b5c3-03e978db76b6\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Customer stories\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSRqYofJOwHTul_icon-main-nav--ProfessionalServices.png?auto=format,compress\",\"id\":\"agpSRqYofJOwHTul\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ZSgkThAAACcAC-sT\",\"type\":\"new_pages\",\"tags\":[\"services\",\"professional services\"],\"lang\":\"en-us\",\"slug\":\"launchdarkly-professional-services\",\"first_publication_date\":\"2023-10-12T16:52:47+0000\",\"last_publication_date\":\"2026-07-08T15:43:17+0000\",\"uid\":\"services\",\"url\":\"/services/\",\"link_type\":\"Document\",\"key\":\"93fcdada-dd96-49ca-b8f3-a466eb109f19\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Professional services\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSRaYofJOwHTuk_icon-main-nav--Partners.png?auto=format,compress\",\"id\":\"agpSRaYofJOwHTuk\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ZMggHhEAACYAn2e4\",\"type\":\"new_pages\",\"tags\":[\"partner program\",\"partner program page\"],\"lang\":\"en-us\",\"slug\":\"lets-build-better-software-together.\",\"first_publication_date\":\"2023-07-31T21:59:14+0000\",\"last_publication_date\":\"2026-07-08T15:56:45+0000\",\"uid\":\"partner-program\",\"url\":\"/partner-program/\",\"link_type\":\"Document\",\"key\":\"c693eb6c-d924-4446-98dc-e50e30a73e31\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Partners\",\"spans\":[],\"direction\":\"ltr\"}]}],\"get_help_group\":[{\"icon\":{\"dimensions\":{\"width\":160,\"height\":160},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpTiKYofJOwHTu2_icon-main-nav--help-center.png?auto=format,compress\",\"id\":\"agpTiKYofJOwHTu2\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"671d49cc-49d6-4614-90a4-3c31313a2f47\",\"url\":\"https://support.launchdarkly.com/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Help Center\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Explore help topics for everything LaunchDarkly.\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":160,\"height\":160},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpTiaYofJOwHTu3_icon-main-nav--request-support.png?auto=format,compress\",\"id\":\"agpTiaYofJOwHTu3\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"b1c38405-1e18-4080-81ee-a86756bec156\",\"url\":\"https://support.launchdarkly.com/hc/en-us/requests/new?ticket_form_id=360000836893\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Request support\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Reach out to us for direct answers to your questions.\",\"spans\":[],\"direction\":\"ltr\"}]}],\"resources_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSVKYofJOwHTuo_icon-main-nav--DocsHome.png?auto=format,compress\",\"id\":\"agpSVKYofJOwHTuo\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"79ea2804-386d-45ba-ae92-9de4e6a20aa2\",\"url\":\"https://launchdarkly.com/docs/home\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Docs home\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSVaYofJOwHTup_icon-main-nav--FeatureFlagQuickstart.png?auto=format,compress\",\"id\":\"agpSVaYofJOwHTup\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"d55987b1-30ac-4d93-907a-c50f827814d5\",\"url\":\"https://launchdarkly.com/docs/home/getting-started\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Feature flags Quickstart\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSUqYofJOwHTum_icon-main-nav--AIConfigsQuickstart.png?auto=format,compress\",\"id\":\"agpSUqYofJOwHTum\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"f3e899b1-5149-4b7f-a205-8d8be0d0d0ca\",\"url\":\"https://launchdarkly.com/docs/home/agentcontrol/quickstart\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"AgentControl Quickstart\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSU6YofJOwHTun_icon-main-nav--APIDocs.png?auto=format,compress\",\"id\":\"agpSU6YofJOwHTun\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"98e0f384-0d91-4ddc-b989-908d24e47a4d\",\"url\":\"https://launchdarkly.com/docs/api/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"API docs\",\"spans\":[],\"direction\":\"ltr\"}]}],\"workflow_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSZqYofJOwHTut_icon-main-nav--Productupdates.png?auto=format,compress\",\"id\":\"agpSZqYofJOwHTut\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"daebf9c5-8c24-4a14-9df2-0a7f80d7dfce\",\"url\":\"https://launchdarkly.com/changelog/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Product Updates\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSZaYofJOwHTus_icon-main-nav--PowerAnalysisCalculator.png?auto=format,compress\",\"id\":\"agpSZaYofJOwHTus\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"4a2ede12-b83e-4114-bbc3-4a738b3d8ccb\",\"url\":\"https://launchdarkly.com/sample-size-calculator/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Power analysis calculator\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSZKYofJOwHTur_icon-main-nav--FlagshipEngineeringBlog.png?auto=format,compress\",\"id\":\"agpSZKYofJOwHTur\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"0eb1c344-46c1-466a-bc84-f3bb4c46290b\",\"url\":\"https://launchdarkly.com/docs/blog\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Flagship engineering blog\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSY6YofJOwHTuq_icon-main-nav--Community.png?auto=format,compress\",\"id\":\"agpSY6YofJOwHTuq\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"84663d21-e4f8-4631-81cd-6da440a8b828\",\"url\":\"https://launchdarkly.com/community/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Community\",\"spans\":[],\"direction\":\"ltr\"}]}],\"banner_group\":[{\"banner_image\":{},\"banner_left_image\":{\"dimensions\":{\"width\":267,\"height\":180},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/aatGU1xvIZEnjb9J_top-nav-moving-at-ai-speed.png?auto=format,compress\",\"id\":\"aatGU1xvIZEnjb9J\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"banner_subtitle_icon\":{},\"banner_position\":\"Bottom\",\"banner_location\":\"Solutions\",\"banner_subtitle\":[{\"type\":\"paragraph\",\"text\":\"Move at AI speed. Stay in control.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_body\":[{\"type\":\"paragraph\",\"text\":\"See how to release, experiment, observe and control AI.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link_text\":[{\"type\":\"paragraph\",\"text\":\"Watch demo now\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link\":{\"link_type\":\"Web\",\"key\":\"bdb970f8-f1f4-424b-ae6b-5160b38903a2\",\"url\":\"https://launchdarkly.com/product-demo/platform-overview/\"}},{\"banner_image\":{},\"banner_left_image\":{\"dimensions\":{\"width\":267,\"height\":180},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/aatGU1xvIZEnjb9J_top-nav-moving-at-ai-speed.png?auto=format,compress\",\"id\":\"aatGU1xvIZEnjb9J\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"banner_subtitle_icon\":{},\"banner_position\":\"Bottom\",\"banner_location\":\"Resources\",\"banner_subtitle\":[{\"type\":\"paragraph\",\"text\":\"Move at AI speed. Stay in control.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_body\":[{\"type\":\"paragraph\",\"text\":\"See how to release, experiment, observe and control AI.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link_text\":[{\"type\":\"paragraph\",\"text\":\"Watch demo\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link\":{\"link_type\":\"Web\",\"key\":\"4d1ad24c-3879-42e8-86de-2ab76c2778ad\",\"url\":\"https://launchdarkly.com/product-demo/platform-overview/\"}},{\"banner_image\":{},\"banner_left_image\":{\"dimensions\":{\"width\":267,\"height\":180},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/aatGU1xvIZEnjb9J_top-nav-moving-at-ai-speed.png?auto=format,compress\",\"id\":\"aatGU1xvIZEnjb9J\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"banner_subtitle_icon\":{},\"banner_position\":\"Bottom\",\"banner_location\":\"Platform\",\"banner_subtitle\":[{\"type\":\"paragraph\",\"text\":\"Move at AI speed. Stay in control.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_body\":[{\"type\":\"paragraph\",\"text\":\"See how to release, experiment, observe \u0026 control AI.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link_text\":[{\"type\":\"paragraph\",\"text\":\"Watch demo\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link\":{\"link_type\":\"Web\",\"key\":\"35310a7f-4223-4c71-b058-f0f99ba04936\",\"url\":\"https://launchdarkly.com/product-demo/platform-overview/\"}},{\"banner_image\":{},\"banner_left_image\":{\"dimensions\":{\"width\":178,\"height\":120},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/abRT8lxvIZEnjqhK_developer-tab-free-trial.png?auto=format,compress\",\"id\":\"abRT8lxvIZEnjqhK\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"banner_subtitle_icon\":{},\"banner_position\":\"Bottom\",\"banner_location\":\"Developers\",\"banner_subtitle\":[{\"type\":\"paragraph\",\"text\":\"Take control of your AI at runtime.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_body\":[{\"type\":\"paragraph\",\"text\":\"Control releases, experiments, and AI behavior in prod.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link_text\":[{\"type\":\"paragraph\",\"text\":\"Free trial\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link\":{\"link_type\":\"Web\",\"key\":\"4a0a8a27-41ee-4993-8274-dab982a68d7d\",\"url\":\"https://app.launchdarkly.com/signup\"}}],\"new_products_group\":[{\"icon\":{\"dimensions\":{\"width\":150,\"height\":150},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpUVqYofJOwHTu-_icon-main-nav--CodeControl.png?auto=format,compress\",\"id\":\"agpUVqYofJOwHTu-\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agTAhBIAACEAWwQ2\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"ship-confidently-with-automatic-recovery-and-continuous-improvement-built-in.\",\"first_publication_date\":\"2026-05-13T18:19:33+0000\",\"last_publication_date\":\"2026-05-19T05:42:39+0000\",\"uid\":\"platform.code-control\",\"url\":\"/platform.code-control/\",\"link_type\":\"Document\",\"key\":\"31f8582d-1543-426b-bfe9-b2e3aa405ab6\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"CodeControl\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Ship confidently, with automated control built in.\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":150,\"height\":150},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpUVaYofJOwHTu9_icon-main-nav--AgentControl.png?auto=format,compress\",\"id\":\"agpUVaYofJOwHTu9\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agSf7RIAAI1IWtRB\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"one-place-to-control-agent-behavior.\",\"first_publication_date\":\"2026-05-13T16:04:01+0000\",\"last_publication_date\":\"2026-06-01T17:57:35+0000\",\"uid\":\"platform.agent-control\",\"url\":\"/platform.agent-control/\",\"link_type\":\"Document\",\"key\":\"a6029978-2730-4f8c-aa21-9c15c2e2fbff\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"AgentControl\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"One place to keep your agent behavior under control.\",\"spans\":[],\"direction\":\"ltr\"}]}]}},\"showBanner\":true,\"noNav\":\"$undefined\",\"addRiskMeterLogo\":\"$undefined\",\"hideLinks\":\"$undefined\",\"useSnowflakeHeader\":\"$undefined\",\"EoDNav\":\"$undefined\",\"useAiTheme\":\"$undefined\",\"isHomepage\":\"$undefined\",\"useRefreshDesign\":\"$undefined\",\"useWhiteLogo\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"34:I[80622,[],\"IconMark\"]\n"])</script><script>self.__next_f.push([1,"5:[[\"$\",\"$L28\",null,{\"document\":{\"id\":\"YFDeghAAACQAeLbl\",\"uid\":\"testing-in-production-for-safety-and-sanity\",\"url\":\"/blog/testing-in-production-for-safety-and-sanity/\",\"type\":\"blog_post\",\"href\":\"https://launchdarkly.cdn.prismic.io/api/v2/documents/search?ref=aqRDsxYAADAAP-_K\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22YFDeghAAACQAeLbl%22%29+%5D%5D\",\"tags\":[\"Test In Production\",\"canary testing\",\"software release\",\"feature flags\"],\"first_publication_date\":\"2021-03-18T17:36:23+0000\",\"last_publication_date\":\"2026-09-04T20:56:16+0000\",\"slugs\":[\"testing-in-production-to-stay-safe-and-sensible\"],\"linked_documents\":[],\"lang\":\"en-us\",\"alternate_languages\":[],\"data\":{\"is_preview_post\":false,\"title\":[{\"type\":\"heading1\",\"text\":\"Testing in production to stay safe and sensible\",\"spans\":[],\"direction\":\"ltr\"}],\"author\":{\"id\":\"X2uduBEAAGj1rmIn\",\"type\":\"author\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"heidi-waterhouse\",\"first_publication_date\":\"2020-09-23T19:10:51+0000\",\"last_publication_date\":\"2020-12-15T23:46:34+0000\",\"uid\":\"heidiw\",\"url\":\"/blog/author/heidiw/\",\"data\":{\"author_name\":[{\"type\":\"heading1\",\"text\":\"Heidi Waterhouse\",\"spans\":[]}],\"uid\":\"heidiw\",\"author_image\":{\"dimensions\":{\"width\":2000,\"height\":2000},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/8178e2d3-a1ff-45d5-8015-83c93e3ad4df__HeidiWaterhouse_Preferred.png?auto=compress,format\u0026rect=0,0,1200,1200\u0026w=2000\u0026h=2000\",\"id\":\"X9lKyhIAACEAs5uh\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1.6666666666666667,\"background\":\"transparent\"}},\"author_bio\":[{\"type\":\"paragraph\",\"text\":\"Heidi is a Principal Developer Advocate. She is working in the intersection of risk, usability, and happy deployments. Her passions include documentation, clear concepts, and skirts with pockets.\",\"spans\":[]}]},\"link_type\":\"Document\",\"key\":\"e90ca82a-2c6f-4201-9e70-6358c8402abe\",\"isBroken\":false},\"timestamp\":null,\"additional_authors\":[{\"additional_author\":{\"link_type\":\"Document\"}}],\"categories\":[{\"category\":{\"id\":\"Z5QhcBcAACkATlPb\",\"type\":\"category\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"developer-productivity\",\"first_publication_date\":\"2025-01-24T23:25:38+0000\",\"last_publication_date\":\"2025-01-24T23:25:38+0000\",\"uid\":\"developer-productivity\",\"url\":\"/blog/category/developer-productivity/\",\"data\":{\"category_name\":[{\"type\":\"heading1\",\"text\":\"Developer productivity\",\"spans\":[],\"direction\":\"ltr\"}]},\"link_type\":\"Document\",\"key\":\"e5c4e092-2ee5-4e99-93c5-745e305945fc\",\"isBroken\":false}},{\"category\":{\"link_type\":\"Document\"}}],\"excerpt\":[{\"type\":\"paragraph\",\"text\":\"“Testing in production” refers to the practice of running code on production servers, using real data from real users, without showing the new behavior to the majority of users. These tests are frequently run during the final stages before releasing the software to a broad audience.\",\"spans\":[]}],\"exclude_recent\":false,\"hide_date\":false,\"enable_table_of_content\":false,\"disable_related_content\":false,\"featured_image\":{\"dimensions\":{\"width\":2000,\"height\":1126},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/0e9e30d7-d680-443e-a070-2533f2e5e942_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress,format\u0026rect=0,0,4000,2252\u0026w=2000\u0026h=1126\",\"id\":\"Yn2JtRQAACQAY03d\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":0.5,\"background\":\"transparent\"}},\"related_posts\":[{\"post\":{\"link_type\":\"Document\"}}],\"video_id\":[],\"video_type\":\"Wistia\",\"body\":[{\"primary\":{\"toc_title\":[],\"wysiwyg\":[{\"type\":\"paragraph\",\"text\":\"“Testing in production” refers to the practice of running code on production servers, using real data from real users, without showing the new behavior to the majority of users. These tests are frequently run during the final stages before releasing the software to a broad audience.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Everyone is testing in production, some organizations admit and plan for it.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Testing in production is not a substitute for quality assurance (QA), or a shortcut to eliminating unit testing or integration testing. Instead, it is an extension of testing and QA control points into the most realistic environment possible—the real-world.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Testing in production has two implementations. In the first, the test exists to prove or disprove a stated hypothesis—“If we make this change, customers will convert at least 10% more often”. The second is to make sure that the change doesn’t cause negative changes for the customers or environment—“If we make this change, checkout won’t be affected”.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Although we use the phrase “test in production” for both implementations, it’s useful to understand what your organization is trying to achieve.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Does production testing replace other testing?\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"No, testing in production is not a replacement for other types of testing and is not a way to eliminate your QA team. Your staging environment will not 100% match your production environment. While there are many types of tests that you should run in test environments prior to deploying code, to get accurate data you need to test in production. \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Your test suite should include the following types of tests in a pre-production environment before releasing new features:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Unit tests to check the smallest unit of code that can be logically isolated. \",\"spans\":[{\"start\":0,\"end\":10,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Integration tests to test software dependencies and the combination of various software modules.  \",\"spans\":[{\"start\":0,\"end\":17,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Performance testing which includes load tests and stress tests to identify how a system or software behaves when there are spikes in production traffic. \",\"spans\":[{\"start\":0,\"end\":19,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Regression tests to confirm previous functionality continues to operate as expected. \",\"spans\":[{\"start\":0,\"end\":16,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Functional tests to confirm the feature performs or functions as expected. \",\"spans\":[{\"start\":0,\"end\":17,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Lint tests to check your source code for programmatic or stylistic errors. \",\"spans\":[{\"start\":0,\"end\":11,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Usability tests to validate the ease of use with end-users. \\n\",\"spans\":[{\"start\":0,\"end\":16,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Ways to test in production \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Many types of tests can be classified as testing in production. Cindy Sridharan describes three phases of production—deploy, release, and post-release. Tests taking place in any of these phases can be considered testing in production. \",\"spans\":[{\"start\":64,\"end\":79,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://copyconstruct.medium.com/testing-in-production-the-safe-way-18ca102d0ef1\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"You may choose to rerun some tests that you conducted in staging or pre-production in your production environment such as integration tests or load tests during the deploy phase. You may not be able to fully run all integration tests in staging based on the configuration of your environment. Verify the results of integration tests in production. Some companies also choose to perform load testing in a production environment prior to deployment as the staging environment might not be of the same scale as production.  \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"During the release phase, you may opt to use a blue-green deployment or a canary release. Both of these can be considered testing in production. \",\"spans\":[{\"start\":74,\"end\":88,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/blog/what-is-a-canary-release/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"A blue-green deployment requires creating two identical instances of a production application. At any given time, one app is receiving user traffic, while the other app receives constant updates from a continuous integration (CI) server. At any time, the system not receiving traffic could become the production environment, hence the testing you are conducting on the inactive application is a production environment. \",\"spans\":[{\"start\":1,\"end\":24,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/blog/blue-green-deployments-a-definition-and-introductory/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"image\",\"url\":\"https://prismic-io.s3.amazonaws.com/launchdarkly/0f0cf3b4-9f25-43fe-bdb8-3442b04f8c08_Test+in+production+.png\",\"alt\":null,\"copyright\":null,\"dimensions\":{\"width\":1800,\"height\":634},\"id\":\"ZcFBWxMAACQA8KTo\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},{\"type\":\"paragraph\",\"text\":\"A blue-green deployment\",\"spans\":[{\"start\":0,\"end\":23,\"type\":\"em\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Canary testing is the process of testing out new features or software versions with a percentage of real users in a production environment. With a canary test, only some users are seeing a new feature or version of the application, but they are seeing it in the production environment. Canary tests are a form of testing in production. \",\"spans\":[{\"start\":0,\"end\":14,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/blog/what-is-canary-testing-a-detailed-explanation/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"image\",\"url\":\"https://prismic-io.s3.amazonaws.com/launchdarkly/945b0bd7-318e-4d5a-8320-475d49172d85_Release+progressions.png\",\"alt\":null,\"copyright\":null,\"dimensions\":{\"width\":1800,\"height\":1364},\"id\":\"ZcFBWxMAACEA8KTq\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},{\"type\":\"paragraph\",\"text\":\"Canary test using feature flags\",\"spans\":[{\"start\":0,\"end\":31,\"type\":\"em\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Testing in production that may occur during the post-release phase includes chaos engineering also known as game days. With chaos engineering, you are proactively looking for how systems and applications respond to stress and failures. Identifying how systems break under certain scenarios can test your hypothesis and prepare you to better address incidents when things break. \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Another form of testing in production that occurs during the release and post-release phases is experimentation. Experiments are sometimes referred to as a/b tests or a/b/n tests. Experiments allow you to gather data from end-users to fine-tune a feature before releasing to all users. With a/b testing, you can collect user data on conversions, performance, or other metrics to determine which version has the most impact on the business.\",\"spans\":[{\"start\":96,\"end\":111,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/blog/nine-experimentation-best-practices/\",\"target\":\"_blank\"}},{\"start\":180,\"end\":191,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/how-it-works/experimentation/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"The advantages of testing in production\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Accuracy\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The purpose of testing in a real environment is to ensure that your test results are accurate. You don’t want to go forward with a change in false confidence. The data in your test environment is often not an exact replica of production data. Different data can impact the accuracy of your tests. Testing your change against real users in the best way to be sure that you have covered edge cases. Target to exactly your demographic. \",\"spans\":[{\"start\":176,\"end\":192,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/blog/test-environments-101-definition-types-and-best/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"It’s difficult to create synthetic users that have the full range of organic users. If you are trying to understand what effect a change will have on a subset of your users, the best way to find out is to deliver it exactly to them.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Limit the blast radius\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Delivering a change and testing it with only a subset of users means that if something does go wrong, you have not affected the whole user base, only those that you are testing on, and feature flags mean that you can rollback any negative changes immediately, without needing to deploy anything different.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"When you gradually roll out new code you can prevent bad deployments from breaking production systems and negatively impacting the user experience. \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Collect feedback\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Collect feedback from monitoring and observability tooling on production systems to understand the success or failure rate of a new feature. Ensure application performance does not shift from an expected baseline in real-time. \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Eat your own dogfood\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Just like a chef tastes their sauces, as people making software, we need to frequently sample the experience of using our software before we share it with others. Being able to turn on a feature that you’re working on just for yourself gives you a lot of immediate feedback on whether the change is positive or negative.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Savings\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Two savings areas related to testing in production were revealed in the  Total Economic Impact of LaunchDarkly study. First, when you can segment your production infrastructure to do testing, you need less of a duplicate infrastructure for dedicated testing. “Software testing processes often require running user testing in a staging environment that closely replicates production, and this is very expensive to build and maintain.” Reducing the size and scope of the stage environment cuts down on overhead, increases deployment velocities, and lowers costs.\",\"spans\":[{\"start\":73,\"end\":110,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://learn.launchdarkly.com/total-economic-impact/#lp-pom-block-8\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Second, developers spend less time solving integration issues. Features have already been tested in production and integration and code errors can be resolved prior to launch. In addition to the cost-savings and boost to developer productivity, developers may also experience less stress and anxiety around resolving incidents after a build is deployed. \",\"spans\":[],\"direction\":\"ltr\"}]},\"items\":[{}],\"id\":\"wysiwyg$f38d0a27-5d48-4435-aa93-8e977d5ef0a4\",\"slice_type\":\"wysiwyg\",\"slice_label\":null},{\"primary\":{},\"items\":[{}],\"id\":\"blog_cta$dcc269ab-8fce-46be-af1f-f0b00e97eff0\",\"slice_type\":\"blog_cta\",\"slice_label\":null},{\"primary\":{\"toc_title\":[],\"wysiwyg\":[{\"type\":\"heading3\",\"text\":\"Weirdness\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Users are weird in unique and unpredictable ways that are difficult to test for. What happens if someone names an object with an emoji, or runs a three-year-old unpatched browser? You don’t want to write test cases for these odd scenarios. You need to test these in production.  \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"What can go wrong with testing in production?\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"People are wary of testing in production because even if you follow all the best practices and have safety mechanisms in place, things can go wrong. What can go wrong, even if you have followed best practices?\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Wider or narrower distribution than intended\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Unforeseen interactions or impacts on other production systems\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Runaway processes\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Pages and alerts to people on-call\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"How do feature flags make production testing safer?\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Everything we put into production carries some danger of negative effects for our users, but planning for that and mitigating it makes it much safer than believing everything will work perfectly.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Yes, production testing can be risky, but you can minimize your risk in two ways. First, take advantage of test automation, don’t bypass running tests in staging because you will be testing in production. (Yes, we mentioned this earlier but it bears repeating). Second, ensure you have the right processes in place to support testing in production, including the use of feature flags.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"A feature flag, or feature toggle, is a software development process used to enable or disable functionality without deploying code. You can wrap a feature in a flag to deploy them to production without making them visible to all users. Once the flag is in production you can give test engineers or software engineers access to run tests or experiments. Feature flags are a critical element to safely testing in production. \",\"spans\":[{\"start\":2,\"end\":14,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/blog/what-are-feature-flags/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Here’s how feature flags can help to mitigate risks when testing in production. \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Small bets\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Smaller changes are easier to undo, and testing a feature with a small group of users enables you to take risks you wouldn’t want to take with all of your users. Share new features with trusted, low-risk customers first to see if you’re headed in the right direction and to identify any “weirdness” that may exist in a live environment. \",\"spans\":[{\"start\":0,\"end\":15,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/blog/no-one-loses-1000-playing-penny-slots/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Easy to reverse course\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"A feature flag allows you to immediately reverse any change that is going poorly. Turn the feature off completely, or leave it on for developers and engineers only. When features are wrapped in a flag, you don’t need to redeploy code to revert back to a previous version. With the flip of a flag, the feature is no longer visible to end-users. \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Progressive Delivery\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The idea of slowly rolling out a feature and using observability data to determine if things are running smoothly are two core tenets of Progressive Delivery. With Progressive Delivery, you can deploy code changes on a daily basis and alter design and development decisions early on in the process. \",\"spans\":[{\"start\":137,\"end\":157,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/blog/what-is-progressive-delivery-all-about/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"image\",\"url\":\"https://images.prismic.io/launchdarkly/9679ba40-a513-4cf2-9099-c307cad8f380_Release+progressions+2.png?auto=compress,format\",\"alt\":null,\"copyright\":null,\"dimensions\":{\"width\":1800,\"height\":1364},\"id\":\"ZcFBWxMAACEA8KTp\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},{\"type\":\"paragraph\",\"text\":\"Using feature flags to progressively deliver new features to users based on region (geolocation)\",\"spans\":[{\"start\":0,\"end\":96,\"type\":\"em\"}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Test in production at scale with LaunchDarkly\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"LaunchDarky’s feature management platform gives teams a seamless, low-risk way to test software changes in production at a high frequency and on a large scale. Feature management is a new class of software tools and processes anchored in the use of feature flags. It is also a key enabler of Progressive Delivery. With LaunchDarkly, software teams can quickly create, see, and manage feature flags when testing code changes in a production environment. \",\"spans\":[{\"start\":0,\"end\":41,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/how-it-works/platform/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"What's more, Code References in LaunchDarkly simplify the process of scrubbing outdated flags from your codebase. LaunchDarkly also integrates with observability and application performance monitoring (APM) tools, further reducing the risk of testing in production. When system performance issues register in your APM tool, you can go into LaunchDarkly and rapidly find and disable (i.e., hit a kill switch) the feature causing the incident. Or with Flag Triggers in LaunchDarkly, the offending feature will get disabled automatically. All told, LaunchDarkly is the ideal solution for testing in production.\",\"spans\":[{\"start\":13,\"end\":28,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/features/code-references/\",\"target\":\"_blank\"}},{\"start\":132,\"end\":142,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/integrations/\",\"target\":\"_blank\"}},{\"start\":450,\"end\":463,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/blog/launched-automatic-kill-switches-using-flag-triggers/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Teams at companies like IBM, TrueCar, and O’Reilly Media leverage LaunchDarkly for testing in production and have enjoyed safe, unceremonious releases as a result.\",\"spans\":[{\"start\":29,\"end\":36,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/case-studies/truecar/\",\"target\":\"_blank\"}},{\"start\":42,\"end\":56,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/case-studies/oreilly/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"}]},\"items\":[{}],\"id\":\"wysiwyg$20286f68-3c69-484c-a751-0b5f01cdc4e9\",\"slice_type\":\"wysiwyg\",\"slice_label\":null},{\"primary\":{\"quote\":[{\"type\":\"paragraph\",\"text\":\"\\\"[Our engineers] can test features in production well in advance of a marketing launch. And if a feature causes problems on the day of the launch, we can just turn it off with a kill switch—no rollbacks. LaunchDarkly makes our releases boring. That’s exactly what we want.\\\"\",\"spans\":[]},{\"type\":\"paragraph\",\"text\":\"\",\"spans\":[]},{\"type\":\"paragraph\",\"text\":\"—Chris Guidry, VP of Engineering, O'Reilly Media\",\"spans\":[]}]},\"items\":[{}],\"id\":\"breakout_quote$8a2a70d4-d278-453b-8732-35e7415fe3d7\",\"slice_type\":\"breakout_quote\",\"slice_label\":null},{\"primary\":{\"video_type\":\"YouTube\",\"youtube_id\":[{\"type\":\"paragraph\",\"text\":\"3WRVgC8SiGc\",\"spans\":[]}]},\"items\":[{}],\"id\":\"youtube_video$1c2bbe8b-d254-44f2-8ea1-2b1801475748\",\"slice_type\":\"youtube_video\",\"slice_label\":null},{\"primary\":{\"video_type\":\"YouTube\",\"youtube_id\":[{\"type\":\"paragraph\",\"text\":\"xNolug4h4v0\",\"spans\":[]}]},\"items\":[{}],\"id\":\"youtube_video$f8532572-e263-4959-aac4-27a9082edc46\",\"slice_type\":\"youtube_video\",\"slice_label\":null},{\"primary\":{\"toc_title\":[],\"wysiwyg\":[{\"type\":\"paragraph\",\"text\":\"Testing in production isn't just for companies the size of Amazon, Google, or Netflix; anybody can test in production. You're likely testing in production today, you just don't know it.\",\"spans\":[]},{\"type\":\"paragraph\",\"text\":\"* * * \",\"spans\":[]},{\"type\":\"paragraph\",\"text\":\"Request a demo of LaunchDarkly’s feature management platform. And don’t miss our Test in Production Meetup (virtual, for now)!\",\"spans\":[{\"start\":0,\"end\":126,\"type\":\"strong\"},{\"start\":0,\"end\":14,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/request-a-demo/\"}},{\"start\":81,\"end\":106,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://www.meetup.com/Test-in-Production/\"}}]},{\"type\":\"paragraph\",\"text\":\"\",\"spans\":[]}]},\"items\":[{}],\"id\":\"wysiwyg$ccd0e153-ef37-47e3-b018-4e749cf8980c\",\"slice_type\":\"wysiwyg\",\"slice_label\":null}],\"meta_title\":[{\"type\":\"heading1\",\"text\":\"Testing in Production to Stay Safe and Sensible - LaunchDarkly\",\"spans\":[]}],\"meta_description\":[{\"type\":\"paragraph\",\"text\":\"Testing software changes in a real-world production environment is essential to modern development. Learn how to test in production safely with feature flags using a feature management platform.\",\"spans\":[]}],\"schema\":[],\"open_graph_image\":{\"dimensions\":{\"width\":4000,\"height\":2314},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/f44cc827-b177-4531-8dc0-25a0ed02bcc9_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress,format\",\"id\":\"ZbqbwhMAACQA5xzO\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}}}}}],\"$L31\",\"$L32\",\"$L33\"]\n"])</script><script>self.__next_f.push([1,"1a:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Testing in Production to Stay Safe and Sensible - LaunchDarkly | LaunchDarkly\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Testing software changes in a real-world production environment is essential to modern development. Learn how to test in production safely with feature flags using a feature management platform.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"LaunchDarkly\"}],[\"$\",\"meta\",\"3\",{\"name\":\"author\",\"content\":\"LaunchDarkly\"}],[\"$\",\"meta\",\"4\",{\"name\":\"generator\",\"content\":\"LaunchDarkly\"}],[\"$\",\"meta\",\"5\",{\"name\":\"referrer\",\"content\":\"origin-when-cross-origin\"}],[\"$\",\"meta\",\"6\",{\"name\":\"creator\",\"content\":\"LaunchDarkly\"}],[\"$\",\"meta\",\"7\",{\"name\":\"publisher\",\"content\":\"LaunchDarkly\"}],[\"$\",\"meta\",\"8\",{\"name\":\"robots\",\"content\":\"index\"}],[\"$\",\"meta\",\"9\",{\"name\":\"googlebot\",\"content\":\"index\"}],[\"$\",\"link\",\"10\",{\"rel\":\"canonical\",\"href\":\"https://launchdarkly.com/blog/testing-in-production-for-safety-and-sanity/\"}],[\"$\",\"meta\",\"11\",{\"name\":\"format-detection\",\"content\":\"telephone=no, address=no, email=no\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:title\",\"content\":\"Testing in Production to Stay Safe and Sensible - LaunchDarkly | LaunchDarkly\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:description\",\"content\":\"Testing software changes in a real-world production environment is essential to modern development. Learn how to test in production safely with feature flags using a feature management platform.\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:url\",\"content\":\"https://launchdarkly.com/blog/testing-in-production-for-safety-and-sanity/\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:site_name\",\"content\":\"LaunchDarkly\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:image\",\"content\":\"https://images.prismic.io/launchdarkly/f44cc827-b177-4531-8dc0-25a0ed02bcc9_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress,format\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:image:width\",\"content\":\"4000\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:image:height\",\"content\":\"2314\"}],[\"$\",\"meta\",\"20\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:site\",\"content\":\"@LaunchDarkly\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:title\",\"content\":\"Testing in Production to Stay Safe and Sensible - LaunchDarkly | LaunchDarkly\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:description\",\"content\":\"Testing software changes in a real-world production environment is essential to modern development. Learn how to test in production safely with feature flags using a feature management platform.\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:image\",\"content\":\"https://images.prismic.io/launchdarkly/f44cc827-b177-4531-8dc0-25a0ed02bcc9_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress,format\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:image:width\",\"content\":\"4000\"}],[\"$\",\"meta\",\"27\",{\"name\":\"twitter:image:height\",\"content\":\"2314\"}],[\"$\",\"link\",\"28\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"96x96\"}],[\"$\",\"link\",\"29\",{\"rel\":\"icon\",\"href\":\"/icon.png?8354b0c15ee5b065\",\"type\":\"image/png\",\"sizes\":\"96x96\"}],[\"$\",\"link\",\"30\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-icon.png?8354b0c15ee5b065\",\"type\":\"image/png\",\"sizes\":\"96x96\"}],[\"$\",\"$L34\",\"31\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"1f:\"$1a:metadata\"\n"])</script><script>self.__next_f.push([1,"36:I[61689,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"37:I[36552,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"PreloadChunks\"]\n"])</script><script>self.__next_f.push([1,"32:[\"$\",\"div\",null,{\"className\":\"styles-module__ZkjjmG__body styles-module__ZkjjmG__isRefreshDesign\",\"children\":[\"$\",\"main\",null,{\"className\":\"styles-module__ZkjjmG__main \",\"children\":[[\"$\",\"section\",null,{\"className\":\"styles-module__NFwUga__newSection styles-module__NFwUga__bgLight\",\"id\":\"$undefined\",\"data-name\":\"$undefined\",\"data-jump-id\":\"$undefined\",\"children\":[\"$\",\"div\",null,{\"className\":\"styles-module__NFwUga__contentContainer \",\"style\":\"$undefined\",\"children\":[\"$L35\",[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__blogContainer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__content\",\"children\":[[\"$\",\"p\",null,{\"className\":\"styles-module__J0n02W__variant_textXsmallCaps styles-module__J0n02W__paragraph styles-module__J0n02W__color_gray04 styles-module__J0n02W__weight_medium\",\"children\":\"Mar 18, 2021\"}],[\"$\",\"h1\",null,{\"className\":\"styles-module__J0n02W__variant_h3 styles-module__J0n02W__weight_semibold styles-module__HXqOTa__blogTitle\",\"children\":\"Testing in production to stay safe and sensible\"}],[\"$\",\"p\",null,{\"className\":\"styles-module__J0n02W__variant_textMain styles-module__J0n02W__paragraph styles-module__J0n02W__color_gray04 styles-module__J0n02W__weight_regular styles-module__HXqOTa__excerpt\",\"children\":\"“Testing in production” refers to the practice of running code on production servers, using real data from real users, without showing the new behavior to the majority of users. These tests are frequently run during the final stages before releasing the software to a broad audience.\"}],[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__authorContainer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"styles-module__5zAopa__author \",\"children\":[[\"$\",\"$L2c\",null,{\"href\":\"/blog/author/heidiw\",\"className\":\"styles-module__5zAopa__authorImage\",\"children\":[\"$\",\"div\",null,{\"className\":\"styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image post-details-author-image\",\"children\":[\"$\",\"$L2b\",null,{\"field\":{\"dimensions\":\"$5:0:props:document:data:author:data:author_image:dimensions\",\"alt\":\"\",\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/8178e2d3-a1ff-45d5-8015-83c93e3ad4df__HeidiWaterhouse_Preferred.png?auto=compress,format\u0026rect=0,0,1200,1200\u0026w=2000\u0026h=2000\",\"id\":\"X9lKyhIAACEAs5uh\",\"edit\":\"$5:0:props:document:data:author:data:author_image:edit\"},\"className\":\"styles-module__nv1SBG__image\",\"quality\":80,\"sizes\":\"$undefined\",\"alt\":\"$undefined\",\"fallbackAlt\":\"\",\"priority\":false,\"placeholder\":\"$undefined\",\"fill\":\"$undefined\",\"loading\":\"lazy\"}]}]}],[\"$\",\"div\",null,{\"className\":\"styles-module__5zAopa__authorDetails\",\"children\":[[\"$\",\"$L2c\",null,{\"href\":\"/blog/author/heidiw\",\"className\":\"styles-module__5zAopa__authorName\",\"children\":\"Heidi Waterhouse\"}],[\"$\",\"div\",null,{\"className\":\"styles-module__5zAopa__authorJobTitle\",\"children\":\"LaunchDarkly\"}]]}]]}],[]]}]]}],[\"$\",\"div\",null,{\"className\":\"styles-module__nv1SBG__container styles-module__nv1SBG__ratio_natural styles-module__nv1SBG__object-fit_cover prismic-image styles-module__HXqOTa__featuredImage\",\"children\":[\"$\",\"$L2b\",null,{\"field\":{\"dimensions\":\"$5:0:props:document:data:featured_image:dimensions\",\"alt\":\"\",\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/0e9e30d7-d680-443e-a070-2533f2e5e942_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress,format\u0026rect=0,0,4000,2252\u0026w=2000\u0026h=1126\",\"id\":\"Yn2JtRQAACQAY03d\",\"edit\":\"$5:0:props:document:data:featured_image:edit\"},\"className\":\"styles-module__nv1SBG__image\",\"quality\":80,\"sizes\":\"$undefined\",\"alt\":\"$undefined\",\"fallbackAlt\":\"\",\"priority\":false,\"placeholder\":\"$undefined\",\"fill\":\"$undefined\",\"loading\":\"eager\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__staticBar\",\"children\":[\"$\",\"$L36\",null,{}]}],[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__blogMainContainer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__body\",\"children\":[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__blogContentWrapper\",\"children\":[\"$\",\"article\",null,{\"className\":\"blog-post-main-content\",\"children\":[[[\"$\",\"div\",\"wysiwyg$f38d0a27-5d48-4435-aa93-8e977d5ef0a4\",{\"data-ld-slice-index\":0,\"data-ld-slice-type\":\"wysiwyg\",\"style\":\"$undefined\",\"children\":[[\"$\",\"$L37\",null,{\"moduleIds\":[\"slicesBlog/index.ts -\u003e ./Wysiwyg\"]}],\"$L38\"]}],\"$L39\",\"$L3a\",\"$L3b\",\"$L3c\",\"$L3d\",\"$L3e\"],\"$L3f\"]}]}]}],\"$L40\"]}],\"$L41\"]}],\"$L42\",\"$L43\",\"$L44\"]}]}],\"$L45\"]}]}]\n"])</script><script>self.__next_f.push([1,"46:I[47358,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"49:I[13428,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"4a:I[36815,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"4b:I[16367,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"4c:I[89179,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"4d:I[99934,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"51:I[637,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"38:[\"$\",\"$L46\",null,{\"data\":\"$5:0:props:document:data:body:0\",\"extraData\":\"$undefined\",\"params\":{\"uid\":\"testing-in-production-for-safety-and-sanity\"},\"searchParams\":{},\"id\":\"wysiwyg$f38d0a27-5d48-4435-aa93-8e977d5ef0a4\",\"type\":\"Wysiwyg\",\"index\":0,\"noContainer\":true}]\n39:[\"$\",\"div\",\"blog_cta$dcc269ab-8fce-46be-af1f-f0b00e97eff0\",{\"data-ld-slice-index\":1,\"data-ld-slice-type\":\"blog_cta\",\"style\":\"$undefined\",\"children\":[[\"$\",\"$L37\",null,{\"moduleIds\":[\"slicesBlog/index.ts -\u003e ./BlogCta\"]}],\"$L47\"]}]\n3a:[\"$\",\"div\",\"wysiwyg$20286f68-3c69-484c-a751-0b5f01cdc4e9\",{\"data-ld-slice-index\":2,\"data-ld-slice-type\":\"wysiwyg\",\"style\":\"$undefined\",\"children\":[[\"$\",\"$L37\",null,{\"moduleIds\":\"$32:props:children:props:children:0:props:children:props:children:1:props:children:2:props:children:0:props:children:props:children:props:children:0:0:props:children:0:props:moduleIds\"}],[\"$\",\"$L46\",null,{\"data\":\"$5:0:props:document:data:body:2\",\"extraData\":\"$undefined\",\"params\":\"$38:props:params\",\"searchParams\":\"$38:props:searchParams\",\"id\":\"wysiwyg$20286f68-3c69-484c-a751-0b5f01cdc4e9\",\"type\":\"Wysiwyg\",\"index\":2,\"noContainer\":true}]]}]\n48:T5c5,"])</script><script>self.__next_f.push([1,"M60 33V39.2124H58.099C56.5677 39.2124 55.3531 39.4513 54.4554 39.9292C53.5578 40.4071 52.8977 41.2301 52.4752 42.3982C52.0528 43.5133 51.8416 45.0266 51.8416 46.9381V52.8319L49.5446 48.3717C49.9142 48.1062 50.4422 47.8938 51.1287 47.7345C51.8152 47.5221 52.5281 47.4159 53.2673 47.4159C55.0099 47.4159 56.462 47.9735 57.6238 49.0885C58.7855 50.1504 59.3663 51.6372 59.3663 53.5487C59.3663 55.354 58.8119 56.8938 57.703 58.1681C56.5941 59.3894 55.0099 60 52.9505 60C51.6304 60 50.3894 59.708 49.2277 59.1239C48.1188 58.4867 47.2211 57.4248 46.5347 55.9381C45.8482 54.3982 45.5049 52.3009 45.5049 49.646V48.292C45.5049 44.5221 46.0066 41.5221 47.0099 39.292C48.066 37.0619 49.571 35.469 51.5248 34.5133C53.4785 33.5044 55.8548 33 58.6535 33H60ZM42.495 33V39.2124H40.5941C39.0627 39.2124 37.8482 39.4513 36.9505 39.9292C36.0528 40.4071 35.3927 41.2301 34.9703 42.3982C34.5479 43.5133 34.3366 45.0266 34.3366 46.9381V52.8319L32.0396 48.3717C32.4092 48.1062 32.9373 47.8938 33.6238 47.7345C34.3102 47.5221 35.0231 47.4159 35.7624 47.4159C37.505 47.4159 38.9571 47.9735 40.1188 49.0885C41.2805 50.1504 41.8614 51.6372 41.8614 53.5487C41.8614 55.354 41.3069 56.8938 40.198 58.1681C39.0891 59.3894 37.505 60 35.4455 60C34.1254 60 32.8845 59.708 31.7228 59.1239C30.6139 58.4867 29.7162 57.4248 29.0297 55.9381C28.3432 54.3982 28 52.3009 28 49.646V48.292C28 44.5221 28.5017 41.5221 29.505 39.292C30.5611 37.0619 32.066 35.469 34.0198 34.5133C35.9736 33.5044 38.3498 33 41.1485 33H42.495Z"])</script><script>self.__next_f.push([1,"3b:[\"$\",\"div\",\"breakout_quote$8a2a70d4-d278-453b-8732-35e7415fe3d7\",{\"data-ld-slice-index\":3,\"data-ld-slice-type\":\"breakout_quote\",\"style\":\"$undefined\",\"children\":[[\"$\",\"$L37\",null,{\"moduleIds\":[\"slicesBlog/index.ts -\u003e ./BreakoutQuote\"]}],[\"$\",\"section\",null,{\"data-jump-id\":\"$undefined\",\"data-name\":\"$undefined\",\"data-theme\":\"$undefined\",\"className\":\"style-module__REJINa__section style-module__REJINa__spacing_bottom_none style-module__REJINa__spacing_top_none styles-module__ejongW__breakoutQuote\",\"children\":[\"$\",\"figure\",null,{\"className\":\"styles-module__n0QSmq__quoteFigure\",\"children\":[[\"$\",\"svg\",null,{\"className\":\"styles-module__n0QSmq__badge\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 72 72\",\"fill\":\"none\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"rect\",null,{\"width\":\"72\",\"height\":\"72\",\"rx\":\"8\",\"fill\":\"currentColor\"}],[\"$\",\"path\",null,{\"d\":\"$48\",\"fill\":\"#F8F8F8\"}]]}],[\"$\",\"div\",null,{\"className\":\"styles-module__n0QSmq__body\",\"children\":[[\"$\",\"blockquote\",null,{\"className\":\"styles-module__n0QSmq__content styles-module__n0QSmq__injectQuotes\",\"children\":[\"$\",\"div\",null,{\"className\":\"$undefined\",\"children\":[[\"$\",\"p\",\"806\",{\"className\":\"styles-module__5zGs1G__text styles-module__5zGs1G__variant_body styles-module__5zGs1G__size_md styles-module__5zGs1G__spacing_md\",\"children\":[[\"$\",\"$1\",\".$805\",{\"children\":[[\"$\",\"$1\",\".$.$0__line\",{\"children\":[[\"[Our engineers] can test features in production well in advance of a marketing launch. And if a feature causes problems on the day of the launch, we can just turn it off with a kill switch—no rollbacks. LaunchDarkly makes our releases boring. That’s exactly what we want.\"]]}]]}]]}]]}]}],[\"$\",\"figcaption\",null,{\"className\":\"styles-module__n0QSmq__attribution\",\"children\":\"Chris Guidry, VP of Engineering, O'Reilly Media\"}]]}]]}]}]]}]\n"])</script><script>self.__next_f.push([1,"3c:[\"$\",\"div\",\"youtube_video$1c2bbe8b-d254-44f2-8ea1-2b1801475748\",{\"data-ld-slice-index\":4,\"data-ld-slice-type\":\"youtube_video\",\"style\":\"$undefined\",\"children\":[[\"$\",\"$L37\",null,{\"moduleIds\":[\"slicesBlog/index.ts -\u003e ./YoutubeVideo\"]}],[\"$\",\"$L49\",null,{\"data\":\"$5:0:props:document:data:body:4\",\"extraData\":\"$undefined\",\"params\":\"$38:props:params\",\"searchParams\":\"$38:props:searchParams\",\"id\":\"youtube_video$1c2bbe8b-d254-44f2-8ea1-2b1801475748\",\"type\":\"YoutubeVideo\",\"index\":4,\"noContainer\":true}]]}]\n3d:[\"$\",\"div\",\"youtube_video$f8532572-e263-4959-aac4-27a9082edc46\",{\"data-ld-slice-index\":5,\"data-ld-slice-type\":\"youtube_video\",\"style\":\"$undefined\",\"children\":[[\"$\",\"$L37\",null,{\"moduleIds\":\"$3c:props:children:0:props:moduleIds\"}],[\"$\",\"$L49\",null,{\"data\":\"$5:0:props:document:data:body:5\",\"extraData\":\"$undefined\",\"params\":\"$38:props:params\",\"searchParams\":\"$38:props:searchParams\",\"id\":\"youtube_video$f8532572-e263-4959-aac4-27a9082edc46\",\"type\":\"YoutubeVideo\",\"index\":5,\"noContainer\":true}]]}]\n3e:[\"$\",\"div\",\"wysiwyg$ccd0e153-ef37-47e3-b018-4e749cf8980c\",{\"data-ld-slice-index\":6,\"data-ld-slice-type\":\"wysiwyg\",\"style\":\"$undefined\",\"children\":[[\"$\",\"$L37\",null,{\"moduleIds\":\"$32:props:children:props:children:0:props:children:props:children:1:props:children:2:props:children:0:props:children:props:children:props:children:0:0:props:children:0:props:moduleIds\"}],[\"$\",\"$L46\",null,{\"data\":\"$5:0:props:document:data:body:6\",\"extraData\":\"$undefined\",\"params\":\"$38:props:params\",\"searchParams\":\"$38:props:searchParams\",\"id\":\"wysiwyg$ccd0e153-ef37-47e3-b018-4e749cf8980c\",\"type\":\"Wysiwyg\",\"index\":6,\"noContainer\":true}]]}]\n3f:[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__mobileCta\",\"children\":[\"$\",\"h5\",null,{\"className\":\"styles-module__HXqOTa__footerTitle\",\"children\":\"Like what you read?\"}]}]\n40:[\"$\",\"section\",null,{\"className\":\"styles-module__o_kpTq__sidebar\",\"children\":[[\"$\",\"$L4a\",null,{\"data\":\"$5:0:props:document:data:body\"}],false,[[\"$\",\"div\",null,{\"className\":\"styles-module__o_kpTq__sidebarNewsletter\",\"children\":[\"$\",\"$L4b\",nu"])</script><script>self.__next_f.push([1,"ll,{\"sidebarVersion\":true}]}],[\"$\",\"div\",null,{\"className\":\"styles-module__o_kpTq__shareLinks\",\"children\":[\"$\",\"div\",null,{\"className\":\"styles-module__o_kpTq__shareContainer\",\"children\":[\"$\",\"$L4c\",null,{\"title\":\"Testing in production to stay safe and sensible\",\"showIcons\":true}]}]}]]]}]\n4e:T4e7,"])</script><script>self.__next_f.push([1,"#go\npackage http\n\nimport (\n\t\"compress/gzip\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n)\n\ntype FirehosePayload struct {\n\tRequestId string\n\tTimestamp int64\n\tRecords []struct {\n\t\tData string\n\t}\n}\n\nfunc ExtractFirehoseMetadata(r *http.Request, body []byte) (*FirehosePayload, [][]byte, error) {\n\tvar payload FirehosePayload\n\tif err := json.Unmarshal(body, \u0026payload); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tattributesMap := struct {\n\t\tCommonAttributes struct {\n\t\t\tCustomHeader string `json:\"x-custom-header\"`\n\t\t} `json:\"commonAttributes\"`\n\t}{}\n\tif err := json.Unmarshal([]byte(r.Header.Get(\"X-Amz-Firehose-Common-Attributes\")), \u0026attributesMap); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\trawRecords := make([][]byte, 0, len(payload.Records))\n\tfor _, l := range payload.Records {\n\t\tdata, err := base64.StdEncoding.DecodeString(l.Data)\n\t\tif err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\n\t\tvar msg []byte\n\t\t// try to load data as gzip. if it is not, assume it is not compressed\n\t\tgz, err := gzip.NewReader(strings.NewReader(string(data)))\n\t\tif err == nil {\n\t\t\tmsg, err = io.ReadAll(gz)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, nil, err\n\t\t\t}\n\t\t} else {\n\t\t\tmsg = data\n\t\t}\n\t\trawRecords = append(rawRecords, msg)\n\t}\n\n\treturn \u0026payload, rawRecords, nil\n}"])</script><script>self.__next_f.push([1,"4f:T44d,"])</script><script>self.__next_f.push([1,"#shell\nCREATE TABLE IF NOT EXISTS logs (\n Timestamp DateTime64(9),\n TraceId String,\n SpanId String,\n TraceFlags UInt32,\n SeverityText LowCardinality(String),\n SeverityNumber Int32,\n ServiceName LowCardinality(String),\n Body String,\n ResourceAttributes Map(LowCardinality(String), String),\n LogAttributes Map(LowCardinality(String), String),\n INDEX idx_trace_id TraceId TYPE bloom_filter GRANULARITY 1,\n INDEX idx_res_attr_key mapKeys(ResourceAttributes) TYPE bloom_filter GRANULARITY 1,\n INDEX idx_res_attr_value mapValues(ResourceAttributes) TYPE bloom_filter GRANULARITY 1,\n INDEX idx_log_attr_key mapKeys(LogAttributes) TYPE bloom_filter GRANULARITY 1,\n INDEX idx_log_attr_value mapValues(LogAttributes) TYPE bloom_filter GRANULARITY 1,\n INDEX idx_body Body TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 1\n)\nENGINE MergeTree()\n PARTITION BY toDate(Timestamp)\n ORDER BY (ServiceName, SeverityText, toUnixTimestamp(Timestamp), TraceId)\n TTL Timestamp + toIntervalDay(30)\n SETTINGS ttl_only_drop_parts = 1;"])</script><script>self.__next_f.push([1,"41:[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__relatedContent\",\"children\":[\"$\",\"$L4d\",null,{\"type\":\"blog_post\",\"cards\":[{\"type\":\"blog_post\",\"url\":\"/request-a-demo/\",\"uid\":\"$undefined\",\"data\":{\"title\":\"Get started with a demo of LaunchDarkly\",\"featured_image\":{\"dimensions\":{\"width\":1920,\"height\":1080},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/ImBV-BjBTpyNYQTc_Blog_Getademo.png?auto=format,compress\",\"id\":\"ImBV-BjBTpyNYQTc\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"categories\":\"$undefined\",\"category\":\"Request a demo\"}},{\"type\":\"blog_post\",\"url\":\"/blog/release-management-checklist/\",\"uid\":\"release-management-checklist\",\"data\":{\"title\":\"Release management checklist: Steps for avoiding downtime\",\"featured_image\":{\"dimensions\":{\"width\":2151,\"height\":1200},\"alt\":\"An illustration demonstrating feature management.\",\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/Z1JIWpbqstJ98GFS_Evergeen-featuremanagement.png?auto=format,compress\",\"id\":\"Z1JIWpbqstJ98GFS\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"categories\":[{\"category\":{\"id\":\"Z5QhcBcAACkATlPb\",\"type\":\"category\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"developer-productivity\",\"first_publication_date\":\"2025-01-24T23:25:38+0000\",\"last_publication_date\":\"2025-01-24T23:25:38+0000\",\"uid\":\"developer-productivity\",\"url\":\"/blog/category/developer-productivity/\",\"data\":{\"category_name\":[{\"type\":\"heading1\",\"text\":\"Developer productivity\",\"spans\":[],\"direction\":\"ltr\"}]},\"link_type\":\"Document\",\"key\":\"89f8c8c8-22a2-4498-bb9a-73cd64c184d6\",\"isBroken\":false}}],\"category\":\"Checklist\"}},{\"type\":\"blog_post\",\"url\":\"/solutions/release-ai-built-code/\",\"uid\":\"$undefined\",\"data\":{\"title\":\"Ship AI-generated code confidently with LaunchDarkly\",\"featured_image\":{\"dimensions\":{\"width\":1920,\"height\":1080},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/aZjnoMFoBIGEgnSQ_Blog_02-26_AI-generatedcodeshipsfast.png?auto=format,compress\",\"id\":\"aZjnoMFoBIGEgnSQ\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"categories\":\"$undefined\",\"category\":\"Solution\"}},{\"type\":\"blog_post\",\"url\":\"/persona/development-teams/\",\"uid\":\"$undefined\",\"data\":{\"title\":\"See how LaunchDarkly allows development teams to confidently release code\",\"featured_image\":{\"dimensions\":{\"width\":1920,\"height\":1080},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/d1VBhZjwlbSiXIvN_Blog_07-26_Observabilityisnotenough_HeroImage_1920x1080.png?auto=format,compress\",\"id\":\"d1VBhZjwlbSiXIvN\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"categories\":\"$undefined\",\"category\":\"Development teams\"}},{\"id\":\"ajWl1hEAACkAw61m\",\"uid\":\"feature-flags-aws-devops-agent\",\"url\":\"/blog/feature-flags-aws-devops-agent/\",\"type\":\"blog_post\",\"href\":\"https://launchdarkly.cdn.prismic.io/api/v2/documents/search?ref=aqRDsxYAADAAP-_K\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22ajWl1hEAACkAw61m%22%29+%5D%5D\",\"tags\":[],\"first_publication_date\":\"2026-06-19T20:32:54+0000\",\"last_publication_date\":\"2026-06-23T22:50:58+0000\",\"slugs\":[\"feature-flags-were-always-important.-sre-agents-make-them-essential.\"],\"linked_documents\":[],\"lang\":\"en-us\",\"alternate_languages\":[],\"data\":{\"is_preview_post\":false,\"title\":[{\"type\":\"heading1\",\"text\":\"Feature flags were always important. SRE agents make them essential.\",\"spans\":[],\"direction\":\"ltr\"}],\"author\":{\"id\":\"ajCDCREAACgAfkn8\",\"type\":\"author\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"cameron-etezadi\",\"first_publication_date\":\"2026-06-15T23:00:55+0000\",\"last_publication_date\":\"2026-06-15T23:00:55+0000\",\"uid\":\"cameron-etezadi\",\"url\":\"/blog/author/cameron-etezadi/\",\"link_type\":\"Document\",\"key\":\"3d57404c-fa63-4462-96ee-f6ba3e2c4084\",\"isBroken\":false},\"timestamp\":\"2026-06-19T21:00:00+0000\",\"additional_authors\":[{\"additional_author\":{\"link_type\":\"Document\"}}],\"categories\":[{\"category\":{\"id\":\"Z5QhcBcAACkATlPb\",\"type\":\"category\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"developer-productivity\",\"first_publication_date\":\"2025-01-24T23:25:38+0000\",\"last_publication_date\":\"2025-01-24T23:25:38+0000\",\"uid\":\"developer-productivity\",\"url\":\"/blog/category/developer-productivity/\",\"data\":{\"category_name\":[{\"type\":\"heading1\",\"text\":\"Developer productivity\",\"spans\":[],\"direction\":\"ltr\"}]},\"link_type\":\"Document\",\"key\":\"2e6683bc-0f08-49ed-9558-9d721069b0ad\",\"isBroken\":false}}],\"excerpt\":[{\"type\":\"paragraph\",\"text\":\"AI-powered SRE agents are getting very good at identifying when something is wrong in production. What they haven't solved, however, and what most teams have dramatically underinvested in, is what happens after the agent knows.\",\"spans\":[],\"direction\":\"ltr\"}],\"exclude_recent\":false,\"hide_date\":false,\"enable_table_of_content\":false,\"disable_related_content\":false,\"featured_image\":{\"dimensions\":{\"width\":3000,\"height\":1688},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/ajWmqY1P9HI4UwNv_Blog_06-26_JointBlogAWS_HeroImage_1920x1080.png?auto=format,compress\u0026rect=0,0,1919,1080\u0026w=3000\u0026h=1688\",\"id\":\"ajWmqY1P9HI4UwNv\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"related_posts\":[{\"post\":{\"id\":\"agE-vhEAACcAn9i-\",\"type\":\"blog_post\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"llm-observability-tutorial-and-best-practices\",\"first_publication_date\":\"2026-05-11T02:53:44+0000\",\"last_publication_date\":\"2026-09-09T20:54:48+0000\",\"uid\":\"llm-observability\",\"url\":\"/blog/llm-observability/\",\"link_type\":\"Document\",\"key\":\"2e9ba4f2-0902-4938-a211-09c480a92786\",\"isBroken\":false}},{\"post\":{\"id\":\"ahtZBBEAACsASHxg\",\"type\":\"blog_post\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"mlops-lifecycle-stages-workflow-and-best-practices\",\"first_publication_date\":\"2026-05-30T22:14:49+0000\",\"last_publication_date\":\"2026-09-10T22:08:04+0000\",\"uid\":\"mlops-lifecycle\",\"url\":\"/blog/mlops-lifecycle/\",\"link_type\":\"Document\",\"key\":\"3f88e85c-1b57-487b-859e-b07b3aac4a08\",\"isBroken\":false}},{\"post\":{\"id\":\"aa84sBAAACQABNBi\",\"type\":\"blog_post\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"protect-yourself-from-vibe-coding-errors\",\"first_publication_date\":\"2026-03-09T21:26:11+0000\",\"last_publication_date\":\"2026-09-09T20:56:48+0000\",\"uid\":\"prevent-ai-coding-errors-in-production\",\"url\":\"/blog/prevent-ai-coding-errors-in-production/\",\"link_type\":\"Document\",\"key\":\"6681c1a8-5d02-4a9d-bf11-f4d3c654111c\",\"isBroken\":false}}],\"video_id\":[],\"video_type\":\"Wistia\",\"body\":[{\"primary\":{\"toc_title\":[],\"wysiwyg\":[{\"type\":\"paragraph\",\"text\":\"Code can pass every test, clear every review, and still cause an incident the moment it hits production. That’s because “correctness” is a property of code in isolation. Production-readiness, on the other hand, is a property of code in context under real load, against real users, interacting with systems that weren't part of the test suite. Most tooling only checks the first one. AI-powered SRE agents are getting very good at identifying when something is wrong in production. What they haven't solved, however, and what most teams have dramatically underinvested in, is what happens after the agent knows.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"An agent that can identify a problem but can't act on it is, at best, a sophisticated pager. And while most teams have invested heavily in the detection side, they have treated the action side as an afterthought. That's a mistake. The agents actually changing how teams operate are the ones that surface the right lever at the right moment, recommending what to do before a problem ships and after one lands, so that when something goes wrong, the human in the loop isn't starting from scratch. The AWS DevOps Agent is a good example of what that looks like in practice, and it's a big part of why we built the LaunchDarkly MCP Server to connect to it.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The tool consistently used to accomplish this is the feature flag. That's not a coincidence. Flags have always been one of the most precise levers available in production. They are instant, reversible, and work at runtime, with no redeployment required. With flags, teams can contain behavioral regressions in a specific user segment while everything else keeps running normally, or they can wrap a risky change in a flag before it ships, so there is a kill switch the moment something goes wrong. You or your agent can disable a misbehaving feature in milliseconds without touching the codebase. Nothing else in the operations toolkit gives you that combination of speed and granularity with the scale and reliability of a proven enterprise-grade platform.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"AI has made that precision more necessary than it has ever been. Teams ship more code faster, but have less deliberate human review at each step. The surface area of what can go wrong in production at any given moment is vastly larger than it used to be. And with that, the nature of failures has changed. It's not always a crash or an error spike. It's a model returning subtly worse outputs. It’s programmatic drift. It's an agent behaving outside its expected parameters. It's the kind of subtle shifts that don't show up in error rates but absolutely show up in customer experience. Traditional incident response tools weren't built for that class of problem. Flags, along with LaunchDarkly best-in-industry goal-seeking experimentation, robust observability, and operational control with AgentControl and Guarded Releases, were.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The value of a flag recommendation depends almost entirely on how quickly the agent can surface it. When something goes wrong, the clock is running. Every minute spent correlating signals, identifying the likely cause, and figuring out which flag to toggle is a minute of customer impact. What changes with a well-connected SRE agent isn't whether a human makes the final call; it's how fast the right information reaches them. The agent collapses the gap between something's wrong and here's exactly what to do about it. The human executes with confidence rather than uncertainty.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The LaunchDarkly MCP Server is how we make that possible. It exposes LaunchDarkly flag operations through the MCP so the MCP-compatible agent can interact with your full flag infrastructure without custom integration work. Through the LaunchDarkly MCP Server, agents can query flag state, identify the relevant flag for a given issue, surface a toggle recommendation with full context for the operator, and provide a complete timestamped audit trail of every change. All of it is available within the same workflow where the agent identified the issue, without context switching, without a separate dashboard, without an approval chain that breaks the agent's momentum.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"LaunchDarkly MCP documentation has complete setup and usage information to enable this functionality in your account.\",\"spans\":[{\"start\":0,\"end\":30,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/docs/home/getting-started/mcp\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"With the LaunchDarkly MCP server connected to the AWS DevOps Agent, the integration works across two distinct workflows. During release management, release readiness review identifies higher-risk changes like policy violations, unsafe access-control expansions, and dependency risks, and recommends wrapping them in a LaunchDarkly feature flag before they ship. The developer gets a recommendation with context: why the change is flagged as high-risk and what flag configuration would give the team a kill switch if something goes wrong in production.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"During incident response, the agent takes a different posture. Rather than reaching immediately for a full rollback, which is blunt, disruptive, and slow, when the situation requires, it queries the MCP Server to identify relevant flags and recommends disabling them as a first-line containment option. The operator gets the right flag, the right context, and a clear recommended action. A targeted flag toggle can contain the blast radius of a behavioral issue in milliseconds, buying the team time to diagnose and fix the root cause without taking down the whole system. It instantly keeps a software problem from becoming a customer problem.  When the fix is ready, the agent can propose a phased re-enablement plan rather than a single all-or-nothing restore. Together, the LaunchDarkly MCP server connections with AWS DevOps agent help enable teams to have higher uptime and availability, along with easy zero-downtime changes and control.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"For a detailed walkthrough of the decision logic behind both workflows, including a sample skill, see the AWS companion post.\",\"spans\":[{\"start\":106,\"end\":125,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://aws.amazon.com/blogs/devops/feature-flag-orchestration-with-aws-devops-agent-and-launchdarkly/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"}]},\"items\":[],\"id\":\"wysiwyg$a4c2b0fd-f607-445e-b8c9-83859d11da88\",\"slice_type\":\"wysiwyg\",\"slice_label\":null},{\"primary\":{\"content\":[{\"type\":\"paragraph\",\"text\":\"Code can pass every test, clear every review, and still cause an incident the moment it hits production. That’s because “correctness” is a property of code in isolation. Production-readiness, on the other hand, is a property of code in context under real load, against real users, interacting with systems that weren't part of the test suite.\",\"spans\":[],\"direction\":\"ltr\"}]},\"items\":[],\"id\":\"simple_quote$68916edd-de5e-4d87-9fd5-86c40954d406\",\"slice_type\":\"simple_quote\",\"slice_label\":null},{\"primary\":{\"toc_title\":[],\"wysiwyg\":[{\"type\":\"paragraph\",\"text\":\"AI-powered SRE agents are getting very good at identifying when something is wrong in production. What they haven't solved, however, and what most teams have dramatically underinvested in, is what happens after the agent knows.\",\"spans\":[],\"direction\":\"ltr\"}]},\"items\":[],\"id\":\"wysiwyg$c0c7ec3d-25ca-47d8-8027-ea71b796a708\",\"slice_type\":\"wysiwyg\",\"slice_label\":null}],\"meta_title\":[{\"type\":\"heading1\",\"text\":\"Feature Flags Were Always Important. SRE Agents Make Them Essential.\",\"spans\":[],\"direction\":\"ltr\"}],\"meta_description\":[{\"type\":\"paragraph\",\"text\":\"AI-powered SRE agents are getting very good at identifying when something is wrong in production. What they haven't solved, however, and what most teams have dramatically underinvested in, is what happens after the agent knows.\",\"spans\":[],\"direction\":\"ltr\"}],\"schema\":[],\"open_graph_image\":{\"dimensions\":{\"width\":1920,\"height\":1080},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/ajWmqY1P9HI4UwNv_Blog_06-26_JointBlogAWS_HeroImage_1920x1080.png?auto=format,compress\",\"id\":\"ajWmqY1P9HI4UwNv\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}}}},{\"id\":\"ajCBLxEAACwAfkcG\",\"uid\":\"why-launchdarkly-is-standardizing-on-new-relic\",\"url\":\"/blog/why-launchdarkly-is-standardizing-on-new-relic/\",\"type\":\"blog_post\",\"href\":\"https://launchdarkly.cdn.prismic.io/api/v2/documents/search?ref=aqRDsxYAADAAP-_K\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22ajCBLxEAACwAfkcG%22%29+%5D%5D\",\"tags\":[],\"first_publication_date\":\"2026-06-15T23:01:17+0000\",\"last_publication_date\":\"2026-06-23T22:50:25+0000\",\"slugs\":[\"why-launchdarkly-is-standardizing-on-new-relic\"],\"linked_documents\":[],\"lang\":\"en-us\",\"alternate_languages\":[],\"data\":{\"is_preview_post\":false,\"title\":[{\"type\":\"heading1\",\"text\":\"Why LaunchDarkly is standardizing on New Relic\",\"spans\":[],\"direction\":\"ltr\"}],\"author\":{\"id\":\"ajCDCREAACgAfkn8\",\"type\":\"author\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"cameron-etezadi\",\"first_publication_date\":\"2026-06-15T23:00:55+0000\",\"last_publication_date\":\"2026-06-15T23:00:55+0000\",\"uid\":\"cameron-etezadi\",\"url\":\"/blog/author/cameron-etezadi/\",\"link_type\":\"Document\",\"key\":\"3d57404c-fa63-4462-96ee-f6ba3e2c4084\",\"isBroken\":false},\"timestamp\":\"2026-06-16T22:50:00+0000\",\"additional_authors\":[{\"additional_author\":{\"link_type\":\"Document\"}}],\"categories\":[{\"category\":{\"id\":\"Z5QhcBcAACkATlPb\",\"type\":\"category\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"developer-productivity\",\"first_publication_date\":\"2025-01-24T23:25:38+0000\",\"last_publication_date\":\"2025-01-24T23:25:38+0000\",\"uid\":\"developer-productivity\",\"url\":\"/blog/category/developer-productivity/\",\"data\":{\"category_name\":[{\"type\":\"heading1\",\"text\":\"Developer productivity\",\"spans\":[],\"direction\":\"ltr\"}]},\"link_type\":\"Document\",\"key\":\"2e6683bc-0f08-49ed-9558-9d721069b0ad\",\"isBroken\":false}}],\"excerpt\":[{\"type\":\"paragraph\",\"text\":\"Today, we are announcing that LaunchDarkly is officially moving its primary observability and telemetry workloads to New Relic.\",\"spans\":[],\"direction\":\"ltr\"}],\"exclude_recent\":false,\"hide_date\":false,\"enable_table_of_content\":false,\"disable_related_content\":false,\"featured_image\":{\"dimensions\":{\"width\":3000,\"height\":1688},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/ajCBcY1P9HI4Uidq_Blog_06-26_NewRelic_HeroImage_1920x1080.png?auto=format,compress\u0026rect=0,0,1919,1080\u0026w=3000\u0026h=1688\",\"id\":\"ajCBcY1P9HI4Uidq\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"related_posts\":[{\"post\":{\"id\":\"agE-vhEAACcAn9i-\",\"type\":\"blog_post\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"llm-observability-tutorial-and-best-practices\",\"first_publication_date\":\"2026-05-11T02:53:44+0000\",\"last_publication_date\":\"2026-09-09T20:54:48+0000\",\"uid\":\"llm-observability\",\"url\":\"/blog/llm-observability/\",\"link_type\":\"Document\",\"key\":\"2e9ba4f2-0902-4938-a211-09c480a92786\",\"isBroken\":false}},{\"post\":{\"id\":\"ahtZBBEAACsASHxg\",\"type\":\"blog_post\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"mlops-lifecycle-stages-workflow-and-best-practices\",\"first_publication_date\":\"2026-05-30T22:14:49+0000\",\"last_publication_date\":\"2026-09-10T22:08:04+0000\",\"uid\":\"mlops-lifecycle\",\"url\":\"/blog/mlops-lifecycle/\",\"link_type\":\"Document\",\"key\":\"3f88e85c-1b57-487b-859e-b07b3aac4a08\",\"isBroken\":false}},{\"post\":{\"id\":\"aa84sBAAACQABNBi\",\"type\":\"blog_post\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"protect-yourself-from-vibe-coding-errors\",\"first_publication_date\":\"2026-03-09T21:26:11+0000\",\"last_publication_date\":\"2026-09-09T20:56:48+0000\",\"uid\":\"prevent-ai-coding-errors-in-production\",\"url\":\"/blog/prevent-ai-coding-errors-in-production/\",\"link_type\":\"Document\",\"key\":\"6681c1a8-5d02-4a9d-bf11-f4d3c654111c\",\"isBroken\":false}}],\"video_id\":[],\"video_type\":\"Wistia\",\"body\":[{\"primary\":{\"toc_title\":[],\"wysiwyg\":[{\"type\":\"paragraph\",\"text\":\"At LaunchDarkly, our mission has always been to give platform teams runtime control over their software. To do that reliably tens of trillions of times a day, our own internal \\\"source of truth\\\" for system health must be beyond reproach.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"For the past several years, we have utilized a variety of observability tools to monitor our global flag delivery network. However, as the landscape of software delivery evolves, so must our internal stack.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Today, we are announcing that LaunchDarkly is officially moving its primary observability and telemetry workloads to New Relic.\",\"spans\":[{\"start\":0,\"end\":127,\"type\":\"strong\"},{\"start\":117,\"end\":126,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://newrelic.com/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Why the shift? Why now?\",\"spans\":[{\"start\":0,\"end\":23,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Software is no longer just built and monitored, it is adjusted and tuned in real-time. This shift requires a level of transparency between the feature management layer and the observability layer that a \\\"jack-of-all-trades\\\" provider simply cannot offer.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Our decision to standardize on New Relic was driven by three core architectural principles:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading4\",\"text\":\"1. Integrity of data \",\"spans\":[{\"start\":0,\"end\":21,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"In the modern SaaS ecosystem, neutral observability is paramount. As other providers in the space move toward vertically integrated, black box models that attempt to bundle feature management and monitoring, LaunchDarkly remains committed to a best-of-breed approach.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"By moving to New Relic, we ensure our telemetry is managed by a partner whose sole mission is intelligent observability, turning data into actionable intelligence. This avoids any conflict of interests that may arise when evaluating feature performance.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading4\",\"text\":\"2. Scalability at the edge\",\"spans\":[{\"start\":0,\"end\":26,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"LaunchDarkly serves tens of trillions of flag evaluations daily. Our infrastructure demands an observability partner that can handle massive cardinality without trade-offs on cost at scale New Relic’s consumption-based model and Intelligent Observability platform provide the high-fidelity data our engineers need to maintain 99.99% uptime for our customers.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading4\",\"text\":\"3. A closed loop between control and visibility\",\"spans\":[{\"start\":0,\"end\":47,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"We believe the \\\"Golden Signal\\\" stack of 2026 is LaunchDarkly + New Relic.\",\"spans\":[{\"start\":48,\"end\":72,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"LaunchDarkly provides the control plane for feature flags.\",\"spans\":[{\"start\":0,\"end\":12,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"New Relic provides the feedback loop and automated actions.\",\"spans\":[{\"start\":0,\"end\":9,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"By migrating our operations to this stack, we are proving that the most sophisticated software delivery platform in the world runs best when it is unburdened by legacy monitoring silos.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"What this means for our customers\",\"spans\":[{\"start\":0,\"end\":33,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"For our customers, this migration is a win for stability and innovation. Our engineering teams can see, in real time, how a flag rollout affects latency, error rates, and throughput across our global network. That kind of closed-loop visibility changes how we operate—and it's the same capability we want our customers to have\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"We are deepening our technical integration with New Relic so that what we’ve done internally becomes a repeatable path for every enterprise looking to pair best-of-breed feature management with best-of-breed observability.\",\"spans\":[],\"direction\":\"ltr\"}]},\"items\":[],\"id\":\"wysiwyg$a4c2b0fd-f607-445e-b8c9-83859d11da88\",\"slice_type\":\"wysiwyg\",\"slice_label\":null},{\"primary\":{\"content\":[{\"type\":\"paragraph\",\"text\":\"\\\"As AI accelerates how fast software gets written and shipped, engineering leaders need an observability layer they can fully trust, one with no stake in the decisions it's helping them make. LaunchDarkly runs some of the most demanding infrastructure in software delivery, and its decision to standardize on New Relic is a meaningful signal to the industry that the best teams are choosing depth over breadth, and a neutral source of truth over a competitor. We are proud to be that platform and excited about what we'll build together.\\\"\",\"spans\":[{\"start\":0,\"end\":538,\"type\":\"em\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"— Michael Frendo, Chief Technology Officer at New Relic\",\"spans\":[{\"start\":0,\"end\":55,\"type\":\"em\"}],\"direction\":\"ltr\"}]},\"items\":[],\"id\":\"simple_quote$68916edd-de5e-4d87-9fd5-86c40954d406\",\"slice_type\":\"simple_quote\",\"slice_label\":null},{\"primary\":{\"toc_title\":[],\"wysiwyg\":[{\"type\":\"heading3\",\"text\":\"The road ahead\",\"spans\":[{\"start\":0,\"end\":14,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The migration is already underway. By standardizing on New Relic, LaunchDarkly is doubling down on our commitment to an open, interoperable ecosystem where the best tools win—and where your data always belongs to you. As our teams work together on deeper integration between our platforms, we’ll share updates on what that unlocks.\",\"spans\":[],\"direction\":\"ltr\"}]},\"items\":[],\"id\":\"wysiwyg$c0c7ec3d-25ca-47d8-8027-ea71b796a708\",\"slice_type\":\"wysiwyg\",\"slice_label\":null}],\"meta_title\":[{\"type\":\"heading1\",\"text\":\"Why LaunchDarkly is Standardizing on New Relic\",\"spans\":[],\"direction\":\"ltr\"}],\"meta_description\":[{\"type\":\"paragraph\",\"text\":\"Today, we are announcing that LaunchDarkly is officially moving its primary observability and telemetry workloads to New Relic.\",\"spans\":[],\"direction\":\"ltr\"}],\"schema\":[],\"open_graph_image\":{\"dimensions\":{\"width\":1920,\"height\":1080},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/ajCBcY1P9HI4Uidq_Blog_06-26_NewRelic_HeroImage_1920x1080.png?auto=format,compress\",\"id\":\"ajCBcY1P9HI4Uidq\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}}}},{\"id\":\"aMhT6BAAACIAVKI-\",\"uid\":\"configuring-opentelemetry-collector-aws-firehose\",\"url\":\"/blog/configuring-opentelemetry-collector-aws-firehose/\",\"type\":\"blog_post\",\"href\":\"https://launchdarkly.cdn.prismic.io/api/v2/documents/search?ref=aqRDsxYAADAAP-_K\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22aMhT6BAAACIAVKI-%22%29+%5D%5D\",\"tags\":[],\"first_publication_date\":\"2025-09-15T17:59:50+0000\",\"last_publication_date\":\"2025-09-15T17:59:50+0000\",\"slugs\":[\"configuring-the-opentelemetry-collector-for-aws-firehose\"],\"linked_documents\":[],\"lang\":\"en-us\",\"alternate_languages\":[],\"data\":{\"is_preview_post\":false,\"title\":[{\"type\":\"heading1\",\"text\":\"Configuring the OpenTelemetry Collector for AWS Firehose\",\"spans\":[],\"direction\":\"ltr\"}],\"author\":{\"id\":\"aHZ8lRIAACQAfgeV\",\"type\":\"author\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"vadim-korolik\",\"first_publication_date\":\"2025-07-15T16:06:54+0000\",\"last_publication_date\":\"2025-07-15T16:06:54+0000\",\"uid\":\"vadim-korolik\",\"url\":\"/blog/author/vadim-korolik/\",\"link_type\":\"Document\",\"key\":\"3edef57a-cf64-4426-bbbf-2bf46cc82856\",\"isBroken\":false},\"timestamp\":null,\"additional_authors\":[{\"additional_author\":{\"link_type\":\"Document\"}}],\"categories\":[{\"category\":{\"id\":\"Z5QhcBcAACkATlPb\",\"type\":\"category\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"developer-productivity\",\"first_publication_date\":\"2025-01-24T23:25:38+0000\",\"last_publication_date\":\"2025-01-24T23:25:38+0000\",\"uid\":\"developer-productivity\",\"url\":\"/blog/category/developer-productivity/\",\"data\":{\"category_name\":[{\"type\":\"heading1\",\"text\":\"Developer productivity\",\"spans\":[],\"direction\":\"ltr\"}]},\"link_type\":\"Document\",\"key\":\"0803a3db-4798-40bb-a9be-8f90022a4cbf\",\"isBroken\":false}}],\"excerpt\":[],\"exclude_recent\":false,\"hide_date\":false,\"enable_table_of_content\":false,\"disable_related_content\":null,\"featured_image\":{\"dimensions\":{\"width\":3000,\"height\":1689},\"alt\":\"opentelemetry and firehose logos\",\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/aMhTu2GNHVfTPQDE_Blog_08-25_ConfiguringtheOpenTelemetryCollectorforAWSFirehose-1-.png?auto=format,compress\u0026rect=0,0,4000,2252\u0026w=3000\u0026h=1689\",\"id\":\"aMhTu2GNHVfTPQDE\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"related_posts\":[{\"post\":{\"link_type\":\"Document\"}}],\"video_id\":[],\"video_type\":null,\"body\":[{\"primary\":{\"toc_title\":[],\"wysiwyg\":[{\"type\":\"paragraph\",\"text\":\"Amazon Kinesis Data Firehose is a fully managed service for delivering real-time streaming data to AWS destinations like S3, Redshift, or Elasticsearch. Integrating Firehose with the OpenTelemetry Collector allows for better observability of logs and metrics flowing through your AWS environment, and allows you to export the data to other destinations.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"At highlight, we support the Firehose format with our cloud hosted OpenTelemetry collector at https://otlpv1.firehose.highlight.io. Our customers configure firehose to export to our collector to ingest logs and metrics into our platform. The result: management-free data export without the need to spin up additional infrastructure.\",\"spans\":[{\"start\":94,\"end\":130,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://otlpv1.firehose.highlight.io\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"In this guide, we’ll explore how we configured the OpenTelemetry Collector to receive and process data from AWS Firehose.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"AWS Firehose\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Before configuring OpenTelemetry, it’s important to understand the format of data sources that Firehose supports. AWS Firehose typically receives data from services like CloudWatch Metrics and CloudWatch Logs.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"CloudWatch Metrics Stream Format\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"AWS Firehose can be configured to receive CloudWatch metrics in either OpenTelemetry 1.0 format or JSON format. The key difference is:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"OpenTelemetry 1.0 format: Structured for direct ingestion into observability platforms. The data uses the OTLP Protobuf with a slight twist: batches of binary collector export records can be concatenated. The payload has a header indicating the number of batches, necessary to split the binary data for deserialization. For reference, check out the opentelemetry-collector-contrib implementation.\",\"spans\":[{\"start\":106,\"end\":119,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/open-telemetry/opentelemetry-proto\",\"target\":\"_blank\"}},{\"start\":349,\"end\":380,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/ff2d5e23033da2a3ce686e1513864a0a0f87b563/receiver/awsfirehosereceiver/internal/unmarshaler/otlpmetricstream/unmarshaler.go#L44-L49\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Metrics JSON format: A more generic format that requires custom parsing before ingestion into OpenTelemetry.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Example JSON payload from a CloudWatch Metrics stream:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#json\\n{\\n \\\"namespace\\\": \\\"AWS/EC2\\\",\\n \\\"metric_name\\\": \\\"CPUUtilization\\\",\\n \\\"dimensions\\\": {\\n \\\"InstanceId\\\": \\\"i-1234567890abcdef0\\\"\\n },\\n \\\"timestamp\\\": 1706000000,\\n \\\"value\\\": 23.5\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"To correctly process this data in OpenTelemetry, a receiver must be configured to parse and extract relevant metrics.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"CloudWatch Logs Format\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"CloudWatch logs can also be streamed to Firehose, where they are typically formatted in JSON. A sample log entry might look like this:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#json\\n{\\n \\\"owner\\\": \\\"123456789012\\\",\\n \\\"logGroup\\\": \\\"/aws/lambda/my-function\\\",\\n \\\"logStream\\\": \\\"2025/01/23/[$LATEST]abcdef1234567890\\\",\\n \\\"timestamp\\\": 1706000000,\\n \\\"requestId\\\": \\\"abc-123\\\",\\n \\\"records\\\": [\\n {\\n \\\"data\\\": \\\"c2VjcmV0IG1lc3NhZ2U=\\\"\\n }\\n ]\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"These logs need to be parsed properly to extract meaningful telemetry data before ingestion into OpenTelemetry.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"OpenTelemetry Collector\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The OpenTelemetry Collector is a vendor-agnostic proxy for receiving, processing, and exporting telemetry data. The OpenTelemetry specification defines the data format implemented by the collector. The collector has streamlined components to control the data ingest, processing, and export to other destinations. The open source ecosystem continues to add new components to the collector, providing support for new ingest formats and new storage backends.\",\"spans\":[{\"start\":116,\"end\":143,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://opentelemetry.io/docs/specs/otel/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Leveraging existing OpenTelemetry receivers can significantly streamline the process of collecting telemetry data by reducing the need for custom parsing and transformation logic. Receivers are purpose-built to handle specific data formats, ensuring compatibility with OpenTelemetry’s internal processing pipeline and reducing engineering overhead. By using a pre-built receiver, you benefit from community support, ongoing maintenance, and optimizations that improve efficiency and reliability. Compared to manual ingestion or custom-built processors, receivers provide a standardized approach that minimizes errors, enhances performance, and simplifies integration with other observability tools.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"One such receiver is the AWS Firehose receiver. To integrate Firehose, you just need to use a custom receiver that can interpret Firehose-formatted payloads. Thankfully, as of October 2024, a firehose receiver has been implemented in the {code}opentelemetry-collector-contrib{/code} collector image.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Custom Receivers\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The OpenTelemetry Collector supports custom receivers through the opentelemetry-collector-contrib repository. The Firehose receiver is not part of the core OpenTelemetry distribution, so you must use the contrib image.\",\"spans\":[{\"start\":66,\"end\":97,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/open-telemetry/opentelemetry-collector-contrib\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"To configure the receivers, modify your OpenTelemetry Collector configuration as follows:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nreceivers:\\n awsfirehose/cwmetrics:\\n endpoint: '0.0.0.0:4433'\\n record_type: cwmetrics\\n include_metadata: true\\n awsfirehose/cwlogs:\\n endpoint: '0.0.0.0:4434'\\n record_type: cwlogs\\n include_metadata: true\\n awsfirehose/otlp_v1:\\n endpoint: '0.0.0.0:4435'\\n record_type: otlp_v1\\n include_metadata: true\\n\\nexporters:\\n debug:\\n sampling_initial: 60\\n sampling_thereafter: 1000\\n otlphttp:\\n endpoint: 'http://example-backend/otel'\\n compression: snappy\\n clickhouse:\\n endpoint: \\\"tcp://clickhouse-server:9000\\\"\\n database: \\\"otel_metrics\\\"\\n username: \\\"default\\\"\\n password: \\\"\\\"\\n\\nservice:\\n pipelines:\\n logs:\\n receivers: [awsfirehose/cwmetrics, awsfirehose/cwlogs, awsfirehose/otlp_v1]\\n exporters: [debug, otlphttp, clickhouse]\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"This configuration sets up 3 Firehose receivers listening on different ports for processing logs and metrics from different sources. The {code}record_type{/code} key determines the expected format (see record_type definitions in the contrib repo). The {code}debug{/code} exporter allows monitoring the number of records received; for your use-case, you would configure an appropriate exporter to send the data to a data store of your choosing.\",\"spans\":[{\"start\":202,\"end\":225,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/awsfirehosereceiver#record-types\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Manual Implementation\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"If a native OpenTelemetry receiver is unavailable or does not fully meet your needs, you may need to manually implement a receiver. For instance, custom parsing of Firehose logs can be done using a processor within OpenTelemetry. You can write a custom implementation to ingest logs:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"$4e\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"This function extracts key log attributes and reformats them for further processing. You may deploy it as a standalone web server listening to firehose, but that would still require conecting it ot the rest of your observability pipeline. To incorporate it into the OpenTelemetry ecosystem, you can create a custom OpenTelemetry Collector Receiver using this implementation. While it's outside of the scope of this blog to describe this in detail, it would just be a matter of building it into the rest of the collector binary. Thankfully, the {code}opentelemetry-collector-contrib{/code} implementation supports most popular data formats.\",\"spans\":[{\"start\":299,\"end\":347,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://opentelemetry.io/docs/collector/building/receiver/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Conclusion\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Integrating AWS Firehose with OpenTelemetry provides a powerful way to collect and analyze telemetry data from AWS services. Whether you use a native receiver or implement a custom solution, Firehose enables seamless data streaming for improved observability. \",\"spans\":[],\"direction\":\"ltr\"}]},\"items\":[],\"id\":\"wysiwyg$673bffeb-113f-4893-b2d8-59d2e4bddb79\",\"slice_type\":\"wysiwyg\",\"slice_label\":null}],\"meta_title\":[{\"type\":\"heading1\",\"text\":\"Configuring the OpenTelemetry Collector for AWS Firehose\",\"spans\":[],\"direction\":\"ltr\"}],\"meta_description\":[{\"type\":\"paragraph\",\"text\":\"In this guide, we’ll explore how we configured the OpenTelemetry Collector to receive and process data from AWS Firehose.\",\"spans\":[],\"direction\":\"ltr\"}],\"schema\":[],\"open_graph_image\":{\"dimensions\":{\"width\":4000,\"height\":2252},\"alt\":\"opentelemetry and firehose logos\",\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/aMhTu2GNHVfTPQDE_Blog_08-25_ConfiguringtheOpenTelemetryCollectorforAWSFirehose-1-.png?auto=format,compress\",\"id\":\"aMhTu2GNHVfTPQDE\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}}}},{\"id\":\"aMhPYxAAACIAVJvd\",\"uid\":\"how-we-built-logging-service-with-clickhouse\",\"url\":\"/blog/how-we-built-logging-service-with-clickhouse/\",\"type\":\"blog_post\",\"href\":\"https://launchdarkly.cdn.prismic.io/api/v2/documents/search?ref=aqRDsxYAADAAP-_K\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22aMhPYxAAACIAVJvd%22%29+%5D%5D\",\"tags\":[],\"first_publication_date\":\"2025-09-15T17:48:15+0000\",\"last_publication_date\":\"2025-09-15T18:00:27+0000\",\"slugs\":[\"how-we-built-logging-as-a-service-with-clickhouse\"],\"linked_documents\":[],\"lang\":\"en-us\",\"alternate_languages\":[],\"data\":{\"is_preview_post\":false,\"title\":[{\"type\":\"heading1\",\"text\":\"How we built logging as a service with Clickhouse\",\"spans\":[],\"direction\":\"ltr\"}],\"author\":{\"id\":\"aHZ8lRIAACQAfgeV\",\"type\":\"author\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"vadim-korolik\",\"first_publication_date\":\"2025-07-15T16:06:54+0000\",\"last_publication_date\":\"2025-07-15T16:06:54+0000\",\"uid\":\"vadim-korolik\",\"url\":\"/blog/author/vadim-korolik/\",\"link_type\":\"Document\",\"key\":\"d007b78f-2064-4907-aa52-b2a25caae747\",\"isBroken\":false},\"timestamp\":null,\"additional_authors\":[{\"additional_author\":{\"link_type\":\"Document\"}}],\"categories\":[{\"category\":{\"id\":\"Z5QhcBcAACkATlPb\",\"type\":\"category\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"developer-productivity\",\"first_publication_date\":\"2025-01-24T23:25:38+0000\",\"last_publication_date\":\"2025-01-24T23:25:38+0000\",\"uid\":\"developer-productivity\",\"url\":\"/blog/category/developer-productivity/\",\"data\":{\"category_name\":[{\"type\":\"heading1\",\"text\":\"Developer productivity\",\"spans\":[],\"direction\":\"ltr\"}]},\"link_type\":\"Document\",\"key\":\"3c265ae1-659c-4907-b173-c23159dae086\",\"isBroken\":false}}],\"excerpt\":[],\"exclude_recent\":false,\"hide_date\":false,\"enable_table_of_content\":false,\"disable_related_content\":null,\"featured_image\":{\"dimensions\":{\"width\":3000,\"height\":1689},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/aMhRBGGNHVfTPQCW_Blog_08-25_HowwebuiltloggingasaservicewithClickHouse.png?auto=format,compress\u0026rect=0,0,4000,2252\u0026w=3000\u0026h=1689\",\"id\":\"aMhRBGGNHVfTPQCW\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"related_posts\":[{\"post\":{\"link_type\":\"Document\"}}],\"video_id\":[],\"video_type\":null,\"body\":[{\"primary\":{\"toc_title\":[],\"wysiwyg\":[{\"type\":\"paragraph\",\"text\":\"Here's a story from before we joined the LaunchDarkly team. A few years ago, Highlight released a revamped version of our error monitoring product whereby you could go from stacktrace to session replay to see exactly what the user did to trigger an error. Getting this insight gives developers the cheat code to figuring out how a bug occurred in the first place.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The next natural extension to solving errors was providing all the logs emitted from clicking a button cycling down and up the stack.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Like most logging applications, we gave you the ability to find logs given whatever custom attributes you attach to a log along with auto-injecting valuable debugging information via our SDKs.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Unlike monitoring tools that do one thing or are so disjointed that nothing works together, we went one step further and autolinked everything in our product with zero config.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"What follows is our journey to building a logging product with Clickhouse and all the mistakes we made along the way.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Figuring out our schema\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"At Highlight, we went gone all in on OpenTelemetry. A nice artifact of that is that it helps accelerate the design phase since we can lean heavily on what they’ve built and adapt it to our needs. We also knew that we wanted to leverage Clickhouse given those who have paved the way before us. Reaching into the internals of OpenTelemetry code, we can see they have a design if you’re running your own collector.\",\"spans\":[{\"start\":37,\"end\":50,\"type\":\"em\"},{\"start\":37,\"end\":50,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://www.highlight.io/blog/opentelemetry\",\"target\":\"_blank\"}},{\"start\":253,\"end\":258,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://blog.cloudflare.com/log-analytics-using-clickhouse/\",\"target\":\"_blank\"}},{\"start\":259,\"end\":262,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://www.uber.com/blog/logging/\",\"target\":\"_blank\"}},{\"start\":263,\"end\":267,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://www.youtube.com/watch?v=CVVp6N8Xeoc\",\"target\":\"_blank\"}},{\"start\":367,\"end\":373,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/f5275de9a1355c13d85161db6b2eae9d239f1ead/exporter/clickhouseexporter/exporter_logs.go#L135-L156\",\"target\":\"_blank\"}},{\"start\":401,\"end\":410,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://opentelemetry.io/docs/collector/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"$4f\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"This gave us enough of a starting point on design and we modified the schema along the way as we understood our needs more.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Adding multi-tenancy\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The above design works if you’re housing your own logs, but we’re building logging as a service. At Highlight, everything is owned by a project. We considered separate tables per project (even separate databases) so one noisy project can’t degrade the experience for everyone else but this video convinced us we just needed to add a single column ({code}ProjectId{/code}).\",\"spans\":[{\"start\":290,\"end\":295,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://www.youtube.com/watch?v=DP7l6Swkskw\u0026t=3777s\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"In Clickhouse, unless explicitly stated, the primary key is derived from the {code}ORDER BY{/code} clause. Since each of our queries would include this column, we simplified our {code}ORDER BY{/code} to:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nORDER BY (ProjectId, toUnixTimestamp(Timestamp)\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Handling time\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Of all the things to get right with logs, time is the most important.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"OpenTelemetry’s schema describes the {code}Timestamp{/code} as type, {code}DateTime64(9){/code}, which implies every time will have nanosecond precision (e.g. {code}2023-04-12 10:20:30.999999999{/code} ). The decision to use this much precision has some precedence of ensuring logs that come at the exact same second can be ordered properly.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"However, once we populated our table with hundreds of millions of logs, we observed that worse case scenario queries are the ones that search over a large time frame even if the result size is small. A simple query to get the most recent 50 logs over the last 30 days:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nSELECT *\\nFROM logs\\nWhere ProjectId = 1\\nAND Timestamp \u003c= now() AND Timestamp \u003e= (now() - toIntervalDay(30))\\nORDER BY\\n Timestamp DESC\\nLIMIT 50\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"would throw memory limit errors:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\n\\\"Code: 241. DB::Exception: Memory limit (for user) exceeded: would use 8.00 GiB (attempt to allocate chunk of 4434098 bytes), maximum: 8.00 GiB. OvercommitTracker decision: Query was selected to stop by OvercommitTracker.: Cache info: Buffer path: ch-s3-faf28823-b036-4ef3-b703-750dad5ee0b9/mergetree/yga/qhwalotmlwzbleeyyrlienvykaxpy, hash key: a4c87d31cb1ecdb47bc88ff5cd84fd12, file_offset_of_buffer_end: 430543, internal buffer remaining read range: [430587:430586], read_type: REMOTE_FS_READ_AND_PUT_IN_CACHE, last caller: ef1cdf5e-fba0-470c-a27b-e2b3fa435d20:471, file segment info: None: (while reading column TraceFlags): (while reading from part /var/lib/clickhouse/disks/s3disk/store/48e/48e1599a-61fc-4783-91d0-cea46ab2400f/20230306_94087_95989_1467/ from mark 0 with max_rows_to_read = 3512): While executing MergeTreeReverse. (MEMORY_LIMIT_EXCEEDED) (version 22.13.1.24479 (official build))\\\\\\\\n\\\"\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"That query would use 8 GB of memory to execute.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"After some searching on GitHub issues, asking the Clickhouse Slack community, and becoming adept at EXPLAIN, we discovered that a lot of performance issues can stem from using too much precision on a timestamp. We reasoned as well that using a {code}DateTime{/code} (second precision) is just fine from a product perspective.\",\"spans\":[{\"start\":24,\"end\":37,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/ClickHouse/ClickHouse/search?q=DateTime64\u0026type=issues\",\"target\":\"_blank\"}},{\"start\":50,\"end\":76,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://clickhouse.com/blog/the-click-house-community#:~:text=ClickHouse%20Community%20Slack%20Channel\",\"target\":\"_blank\"}},{\"start\":100,\"end\":107,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://www.youtube.com/watch?v=hP6G2Nlz_cA\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"We created a new table, (aptly named {code}logs_new{/code} ) with the column {code}Timetamp DateTime{/code} and backfilled the data from the old table, {code}logs{/code}:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nINSERT INTO logs_new\\nSELECT * from logs;\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Running the same query takes uses only 520.34 MB of memory. As previously stated, searching a large time frame is the worse case scenario — performance improves greatly when the time frame is smaller or when additional filters are added.\",\"spans\":[{\"start\":39,\"end\":58,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/highlight/highlight/pull/4667\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Pagination and permalinking\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"There’s three hard problems in computer science: naming things, cache invalidation, and stable, cursor pagination.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"When a user loads the logs page, we return back the most recent 50 logs. As they scroll to the end of the window, we load the next 50 logs after the last log in the first request.\",\"spans\":[{\"start\":139,\"end\":144,\"type\":\"em\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"This isn’t this author’s first rodeo with respect to pagination. Inefficient solutions like using {code}OFFSET{/code} pagination that say “give me the next page” of logs are easy to set up but far less scalable than solutions like cursor pagination that say “give me the next set of logs after this cursor*”.* For most databases, the cursor is an auto-incrementing ID (presumably this is in sync with a record’s creation time).\",\"spans\":[{\"start\":288,\"end\":293,\"type\":\"em\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"But Clickhouse has no concept of an auto-incrementing IDs and when a record is created it is not a true definition of time in a logging application. A log’s timestamp should be when it was emitted from a customer’s code. Because we use batching techniques under the hood to flush logs periodically, there will be some delay before that log is finally written to our Clickhouse database. To make the problem harder, it’s entirely likely that two logs could share the same timestamp if they are emitted at nearly the same time.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Relay to the rescue\",\"spans\":[{\"start\":0,\"end\":19,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"A good forcing function for us was figuring out first what the API would look like. We use GraphQL at Highlight because we love taking advantage of its type safety. Relay is an opinionated way of designing your GraphQL API. We’ve never tapped into it prior but they do provide a spec on structuring pagination responses.\",\"spans\":[{\"start\":165,\"end\":170,\"type\":\"em\"},{\"start\":165,\"end\":170,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://relay.dev/\",\"target\":\"_blank\"}},{\"start\":279,\"end\":283,\"type\":\"em\"},{\"start\":279,\"end\":283,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://relay.dev/graphql/connections.htm\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\n{\\n logs(after: \\\"opaqueCursor\\\") {\\n edges {\\n cursor\\n node {\\n timestamp\\n message\\n ... // other log data\\n }\\n }\\n pageInfo {\\n hasNextPage\\n }\\n }\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The naming can feel overly verbose for the uninitiated but the takeaway is that if you can achieve the spec, then you’ve solved the problem. Relay uses the intentional naming of {code}cursor{/code} which is type {code}String{/code} and not a GraphQL ID. It’s up to the implementer to decide on how this is defined.\",\"spans\":[{\"start\":242,\"end\":252,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://graphql.org/learn/schema/#scalar-types\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The above code example solves paging forward and it’s a great starting point before trying to complete the full spec of also paging backwards.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"UUID to the rescue\",\"spans\":[{\"start\":0,\"end\":18,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Now that we had our spec in place, we needed to fill in the details. For our cursor, we wanted something to be unique. Since a log’s timestamp isn’t guaranteed to be unique, we opted to join it with a new column with a generated UUID to handle conflicts when two logs share the same timestamp.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"As mentioned before, a {code}cursor{/code} is a {code}String{/code} so we used this function to generate one when we are passing a {code}cursor{/code} to the frontend.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nfunc encodeCursor(t time.Time, uuid string) string {\\n key := fmt.Sprintf(\\\"%s,%s\\\", t.Format(time.RFC3339), uuid)\\n return base64.StdEncoding.EncodeToString([]byte(key))\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"and this one to decode the {code}cursor{/code} passed from the frontend to the backend:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nfunc decodeCursor(encodedCursor string) (timestamp time.Time, uuid string, err error) {\\n byt, err := base64.StdEncoding.DecodeString(encodedCursor)\\n if err != nil {\\n return\\n }\\n\\n arrStr := strings.Split(string(byt), \\\",\\\")\\n if len(arrStr) != 2 {\\n err = e.New(\\\"cursor is invalid\\\")\\n return\\n }\\n\\n timestamp, err = time.Parse(time.RFC3339, arrStr[0])\\n if err != nil {\\n return\\n }\\n uuid = arrStr[1]\\n return timestamp, uuid, err\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"So when the frontend says “give me the next of logs after this cursor”, we can decode the timestamp and UUID and pass it into this {code}WHERE{/code} clause:\",\"spans\":[{\"start\":52,\"end\":57,\"type\":\"em\"}],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nWHERE Timestamp \u003c= time\\n AND (Timestamp \u003c time OR UUID \u003c uuid)\\nORDER BY Timestamp DESC, UUID DESC\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The {code}AND{/code} handles when two logs share the same timestamp meaning that making the same request multiple times will result in the same order of results.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Further reading\",\"spans\":[{\"start\":0,\"end\":15,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"There’s a lot more to pagination and we encourage readers to see the full PR that goes into more detail if you are doing something similar with Clickhouse and we followed up with handling backwards pagination and permalinking (fun stuff with subselects and unions).\",\"spans\":[{\"start\":69,\"end\":76,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/highlight/highlight/pull/4319\",\"target\":\"_blank\"}},{\"start\":162,\"end\":173,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/highlight/highlight/pull/4417\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Filtering\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Most logging apps have complex languages where 99% of the functionality is unused. Ours is intentionally simple. Given a log such as:\",\"spans\":[{\"start\":5,\"end\":12,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://help.sumologic.com/docs/search/search-query-language/\",\"target\":\"_blank\"}},{\"start\":13,\"end\":17,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://docs.splunk.com/Documentation/SplunkCloud/9.0.2303/Search/GetstartedwithSearch\",\"target\":\"_blank\"}},{\"start\":83,\"end\":87,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://www.highlight.io/docs/general/product-features/logging/log-search\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nlogger.info('Hello world', {\\n table: 'users',\\n}),\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"{code}Hello world{/code} is the log message, {code}info{/code} is the log level, and {code}table:custom{/code} is an arbitrary key/value pair.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Searching common fields like the log’s level (e.g. {code}level:info{/code} ) maps to a top level column in our Clickhouse table:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nSELECT * FROM logs\\nWHERE ProjectId = 1\\nAND Timestamp \u003c= now()\\nAND Timestamp \u003e= (now() - toIntervalDay(1))\\nWHERE SeverityText = 'info'\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Searching custom attributes (e.g. {code}table:custom{/code}) queries against a Clickhouse map column which allows for a flexible schema-less storage.\",\"spans\":[{\"start\":90,\"end\":100,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://clickhouse.com/docs/en/sql-reference/data-types/map\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nSELECT * FROM logs\\nWHERE ProjectId = 1\\nAND Timestamp \u003c= now()\\nAND Timestamp \u003e= (now() - toIntervalDay(1))\\nWHERE LogAttributes['table'] = 'custom'\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Log message filtering\",\"spans\":[{\"start\":0,\"end\":21,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Ideally logs are filtered by some type of key/value pair but most people are going to just search for a log’s message (particularly those who have small apps).\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"We store log messages in a column called {code}Body{/code} and it has a {code}tokenbf_v1{/code}skip index defined as:\",\"spans\":[{\"start\":95,\"end\":105,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://clickhouse.com/docs/en/optimize/skipping-indexes\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nINDEX idx_body Body TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 1\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Which means that it stores a string such as “Hello world” as tokens [{code}\\\"Hello\\\", \\\"world\\\"{/code}]. Hence, to effectively use that index, searching against this requires us to split up the string passed in:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"SELECT * FROM logs\\nWHERE ProjectId = 1\\nAND Timestamp \u003c= now()\\nAND Timestamp \u003e= (now() - toIntervalDay(1))\\nWHERE hasToken(Body, 'Hello') AND hasToken(Body, 'world')\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"We’ve also noticed performance gains by manually overriding {code}PREWHERE{/code} for these types of searches. Check out this pull request if you want a deeper dive with {code}EXPLAIN{/code} .\",\"spans\":[{\"start\":126,\"end\":138,\"type\":\"em\"},{\"start\":126,\"end\":138,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/highlight/highlight/pull/4725\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Wiring this up in Go\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Much of this blog post has focused on Clickhouse, but we also wanted to give some attention to how we built this with Go, our language of choice at Highlight. And while we love Go, we do know it can be difficult to sift through the many libraries out there. With that being said, here’s a speed run of how we use Go with Clickhouse along with pull request examples.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Connecting to Clickhouse\",\"spans\":[{\"start\":0,\"end\":24,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Clickhouse provides an official client for connecting to a Clickhouse database. We recommend this middle ground over low level tooling like ch-go and high level ORM tooling like go-clickhouse that’ll just get in your way.\",\"spans\":[{\"start\":23,\"end\":38,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/ClickHouse/clickhouse-go\",\"target\":\"_blank\"}},{\"start\":140,\"end\":145,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/ClickHouse/ch-go\",\"target\":\"_blank\"}},{\"start\":178,\"end\":191,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/uptrace/go-clickhouse\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"https://github.com/highlight/highlight/pull/3606\",\"spans\":[{\"start\":0,\"end\":48,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/highlight/highlight/pull/3606\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Migrations\",\"spans\":[{\"start\":0,\"end\":10,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The migrate tool has multiple database support (Clickhouse being one of them). Migrations are automatically run when our backend spins up.\",\"spans\":[{\"start\":4,\"end\":16,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/golang-migrate/migrate\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"https://github.com/highlight/highlight/pull/4109\",\"spans\":[{\"start\":0,\"end\":48,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/highlight/highlight/pull/4109\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Testing\",\"spans\":[{\"start\":0,\"end\":7,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"We have a dedicated test database for Clickhouse that is spun up in each of our tests.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nfunc TestMain(m *testing.M) {\\n _, err := setupClickhouseTestDB()\\n if err != nil {\\n panic(\\\"Failed to setup clickhouse test database\\\")\\n }\\n code := m.Run()\\n os.Exit(code)\\n}\\n\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"and each test handles setting up a test client along with cleaning up the data:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nfunc setupTest(tb testing.TB) (*Client, func(tb testing.TB)) {\\n client, _ := NewClient(TestDatabase)\\n\\n return client, func(tb testing.TB) {\\n err := client.conn.Exec(context.Background(), \\\"TRUNCATE TABLE logs\\\")\\n assert.NoError(tb, err)\\n }\\n}\\n\\nfunc TestBatchWriteLogRows(t *testing.T) {\\n ctx := context.Background()\\n client, teardown := setupTest(t)\\n defer teardown(t)\\n\\n // some code that uses `ctx` and `client`\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"See logs_test.go for all things we found useful to test.\",\"spans\":[{\"start\":4,\"end\":16,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/highlight/highlight/blob/main/backend/clickhouse/logs_test.go\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Query building\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Much of what we’ve talked about that’s Clickhouse related is just an SQL snippet. In a real application, this is only half the battle. The {code}WHERE{/code} part of our SQL is going to constantly change given how a user wants to query their logs.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Fortunately, because Clickhouse uses familiar SQL syntax, there are plenty of SQL builders in Go. Initially we went with squirrel but ended up pivoting to the aptly named go-sqlbuilder because unlike most SQL builders, it has support for when querying gets more complex (like subqueries) while still ensuring code is safe from SQL injections.\",\"spans\":[{\"start\":121,\"end\":129,\"type\":\"em\"},{\"start\":121,\"end\":129,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/Masterminds/squirrel\",\"target\":\"_blank\"}},{\"start\":171,\"end\":184,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/huandu/go-sqlbuilder\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"All of our logic for querying (and writing) to Clickhouse can be found in logs.go.\",\"spans\":[{\"start\":74,\"end\":81,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/highlight/highlight/blob/main/backend/clickhouse/logs.go\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Summary\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"In closing, Clickhouse has been a pleasure to work with. Despite no one having any prior knowledge, we were able to pick it up quickly. This is in large part to the great documentation and the Clickhouse community (support team especially). We are already considering using Clickhouse for new feature development and replacing other parts of our stack (namely OpenSearch and InfluxDB).\",\"spans\":[],\"direction\":\"ltr\"}]},\"items\":[],\"id\":\"wysiwyg$fbb7dbd2-c42a-4395-8d32-44f265110b37\",\"slice_type\":\"wysiwyg\",\"slice_label\":null}],\"meta_title\":[{\"type\":\"heading1\",\"text\":\"How we built logging as a service with Clickhouse\",\"spans\":[],\"direction\":\"ltr\"}],\"meta_description\":[{\"type\":\"paragraph\",\"text\":\"Our journey to building a logging product with Clickhouse and all the mistakes we made along the way.\",\"spans\":[],\"direction\":\"ltr\"}],\"schema\":[],\"open_graph_image\":{\"dimensions\":{\"width\":4000,\"height\":2252},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/aMhRBGGNHVfTPQCW_Blog_08-25_HowwebuiltloggingasaservicewithClickHouse.png?auto=format,compress\",\"id\":\"aMhRBGGNHVfTPQCW\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}}}},{\"id\":\"aLCeXRAAACgAHW8D\",\"uid\":\"releasing-measuring-improving-in-real-time\",\"url\":\"/blog/releasing-measuring-improving-in-real-time/\",\"type\":\"blog_post\",\"href\":\"https://launchdarkly.cdn.prismic.io/api/v2/documents/search?ref=aqRDsxYAADAAP-_K\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22aLCeXRAAACgAHW8D%22%29+%5D%5D\",\"tags\":[],\"first_publication_date\":\"2025-08-28T18:23:23+0000\",\"last_publication_date\":\"2026-09-10T15:44:32+0000\",\"slugs\":[\"releasing-measuring-and-improving-in-real-time\"],\"linked_documents\":[],\"lang\":\"en-us\",\"alternate_languages\":[],\"data\":{\"is_preview_post\":false,\"title\":[{\"type\":\"heading1\",\"text\":\"Releasing, measuring, and improving in real time\",\"spans\":[],\"direction\":\"ltr\"}],\"author\":{\"id\":\"Z6QUmBAAACYAzLto\",\"type\":\"author\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"neha-julka\",\"first_publication_date\":\"2025-02-06T01:47:59+0000\",\"last_publication_date\":\"2025-10-31T16:28:27+0000\",\"uid\":\"neha-julka\",\"url\":\"/blog/author/neha-julka/\",\"link_type\":\"Document\",\"key\":\"3b8bcecc-3fe9-4165-9744-e1c1177d24e3\",\"isBroken\":false},\"timestamp\":\"2025-08-28T18:00:00+0000\",\"additional_authors\":[{\"additional_author\":{\"link_type\":\"Document\"}}],\"categories\":[{\"category\":{\"id\":\"Z5QhcBcAACkATlPb\",\"type\":\"category\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"developer-productivity\",\"first_publication_date\":\"2025-01-24T23:25:38+0000\",\"last_publication_date\":\"2025-01-24T23:25:38+0000\",\"uid\":\"developer-productivity\",\"url\":\"/blog/category/developer-productivity/\",\"data\":{\"category_name\":[{\"type\":\"heading1\",\"text\":\"Developer productivity\",\"spans\":[],\"direction\":\"ltr\"}]},\"link_type\":\"Document\",\"key\":\"722ddd3a-0502-4495-90ed-774855938f52\",\"isBroken\":false}}],\"excerpt\":[{\"type\":\"paragraph\",\"text\":\"Close the loop between shipping features and seeing results.\",\"spans\":[],\"direction\":\"ltr\"}],\"exclude_recent\":false,\"hide_date\":false,\"enable_table_of_content\":false,\"disable_related_content\":false,\"featured_image\":{\"dimensions\":{\"width\":3000,\"height\":1688},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/aLCdtGGNHVfTOarb_Blog_08-25_FeatureFeedbackLoop_1920x1080.png?auto=format,compress\u0026rect=0,0,1919,1080\u0026w=3000\u0026h=1688\",\"id\":\"aLCdtGGNHVfTOarb\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"related_posts\":[{\"post\":{\"id\":\"ZQ3iWxEAAB8A01ue\",\"type\":\"blog_post\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"experimentation-the-power-of-continuous-improvement\",\"first_publication_date\":\"2023-09-22T19:03:37+0000\",\"last_publication_date\":\"2026-07-15T17:00:05+0000\",\"uid\":\"experimentation-the-power-of-continuous-improvement\",\"url\":\"/blog/experimentation-the-power-of-continuous-improvement/\",\"link_type\":\"Document\",\"key\":\"d328212f-376e-4b0c-93f3-5415613b59bf\",\"isBroken\":false}},{\"post\":{\"id\":\"aGwhYxIAACgAJD7r\",\"type\":\"blog_post\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"making-experimentation-work-for-product-managers\",\"first_publication_date\":\"2025-07-07T19:48:39+0000\",\"last_publication_date\":\"2025-07-08T15:34:50+0000\",\"uid\":\"experimentation-for-product-managers\",\"url\":\"/blog/experimentation-for-product-managers/\",\"link_type\":\"Document\",\"key\":\"8feaef37-a781-4dd2-a49c-6bfd3edad963\",\"isBroken\":false}}],\"video_id\":[],\"video_type\":\"Wistia\",\"body\":[{\"primary\":{\"key_takeaway_title\":[],\"takeaway_paragraph\":[]},\"items\":[{\"bullet_point\":[{\"type\":\"paragraph\",\"text\":\"The feature feedback loop problem is the gap between shipping a feature and knowing whether it worked.\",\"spans\":[],\"direction\":\"ltr\"}]},{\"bullet_point\":[{\"type\":\"paragraph\",\"text\":\"Three patterns break the loop: manual data stitching, inconsistent instrumentation across codebases, and conflicting dashboards that report different numbers.\",\"spans\":[],\"direction\":\"ltr\"}]},{\"bullet_point\":[{\"type\":\"paragraph\",\"text\":\"A healthy loop starts at release: ship behind a flag, target a subset of users, measure in real time, then expand or roll back.\",\"spans\":[],\"direction\":\"ltr\"}]},{\"bullet_point\":[{\"type\":\"paragraph\",\"text\":\"Closing the loop takes feature flags, product analytics, experimentation, and guardrails like instant kill switches in one workflow, so PMs see impact without waiting on data teams.\",\"spans\":[],\"direction\":\"ltr\"}]}],\"id\":\"key_takeaways$9d62d2b7-eab1-418a-9d03-5be71f86dbeb\",\"slice_type\":\"key_takeaways\",\"slice_label\":null},{\"primary\":{\"toc_title\":[],\"wysiwyg\":[{\"type\":\"paragraph\",\"text\":\"When a feature ships, most product teams celebrate. The code is merged, the deploy goes live, and everyone moves on to the next item on the roadmap. But weeks later, when someone asks if the feature actually worked, the answer is sometimes unclear.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The data is too slow or too fragmented to suggest a clear answer. Product managers wait on data teams to pull reports. Engineers move on without visibility into outcomes. Teams see lagging KPIs but rarely know which features had the greatest impact.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"This is the feature feedback loop problem: the gap between “we shipped it” and “we know if it worked.” Right now, that loop is broken.\",\"spans\":[{\"start\":60,\"end\":74,\"type\":\"em\"},{\"start\":80,\"end\":102,\"type\":\"em\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The solution isn’t another dashboard or siloed analytics tool. It is to build feedback loops into the same layer that delivers your features, so every release can be measured and improved in real time.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Why the feature feedback loop is broken \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"For most teams, the feedback loop breaks down because tools and workflows aren’t connected.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Feature management, experimentation, and analytics usually live in separate platforms. That means product managers rely on data teams to build dashboards or pull metrics, while engineers move on without knowing if what they shipped worked.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"A few patterns show up again and again:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Manual data stitching. Teams export events into spreadsheets or wait on analysts to combine reports from different systems.\",\"spans\":[{\"start\":0,\"end\":22,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Inconsistent instrumentation. Events aren’t tracked the same way across codebases, which creates gaps or duplicates in the data.\",\"spans\":[{\"start\":0,\"end\":29,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"Conflicting dashboards. Different tools report slightly different numbers, leaving PMs unsure which ones to trust.\",\"spans\":[{\"start\":0,\"end\":23,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The result is a slow, fragmented process where insights show up too late to be useful. For example, a product manager asks for data on a new onboarding flow, but by the time the dashboard is ready, the team has already shipped three more changes. \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"What a healthy feature feedback loop looks like\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"A healthy feature feedback loop doesn’t start weeks after launch; it starts the moment a feature is released.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"A new feature ships behind a flag. Instead of releasing it to everyone at once, it’s rolled out to a targeted group of users. Teams track adoption, retention, and usage patterns in real time, connected directly to the feature itself.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"If the results look good, the rollout expands to more users and eventually to everyone. If there are problems, the team can run an experiment to test a new approach or roll the feature back entirely. \",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading3\",\"text\":\"Feedback process: a real-world example\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Let’s say your team introduces a new “Save for later” feature in your app. Instead of enabling it for the entire user base, you target 10 percent of users. Analytics show that people who use the feature come back to the app more often, but overall adoption is lower than expected. To understand why, the team runs an experiment with two different button placements—one in the main navigation and one on product detail pages. Within days, the data shows which option drives more usage, and the winning version is rolled out to everyone. Instead of wondering why adoption was lagging, the team now knows how to design the feature for real engagement.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The same process applies whether you’re testing two versions of a pricing page with different copy or checking to see if showing recommended items during checkout increases order size. The loop is the same: target a group, measure in real time, then roll forward or back based on the results.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Faster feedback leads to faster learning, fewer wasted roadmap bets, and a stronger, evidence-based product culture.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"How LaunchDarkly helps close the loop\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Closing the feature feedback loop starts with treating the feature as the unit of value. LaunchDarkly unifies feature flags, product analytics, experimentation, and risk controls into a single workflow, so teams can understand impact and act on it in real time.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Feature flags control who sees what and when, connecting feature context directly to user behavior. Risk guardrails like gradual rollouts, instant kill switches, and approval workflows (for example, a tech lead or product owner signing off before a change goes live), add a layer of protection so teams can test new ideas without putting the entire user base at risk. A new search algorithm can be rolled out to just 5 percent of users, with a kill switch in place if error rates spike.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Product analytics can then make it easy to see adoption, retention, and usage patterns as they happen. Instead of waiting on data teams, product managers can track funnels and cohorts on their own, without writing SQL or custom queries.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Experimentation builds on this foundation. Teams can compare variants against the metrics that matter, and then promote the winner or roll back the loser without redeploying. Automated thresholds add another safeguard by disabling underperforming features instantly, reducing the chance of late-night fire drills.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The result is a faster, safer path from shipping to insight.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"Build your own feedback loop\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"With a healthy feature feedback loop, you can move faster, take fewer risks, and make decisions with confidence. If you want to try it yourself, you can explore LaunchDarkly in the sandbox, or request a demo to see how it works. \",\"spans\":[{\"start\":161,\"end\":188,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://demo.app.launchdarkly.com\",\"target\":\"_blank\"}},{\"start\":193,\"end\":207,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://launchdarkly.com/request-a-demo/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"}]},\"items\":[],\"id\":\"wysiwyg$1310ac3e-de94-47a4-b147-d1f4f1140117\",\"slice_type\":\"wysiwyg\",\"slice_label\":null}],\"meta_title\":[{\"type\":\"heading1\",\"text\":\"Releasing, measuring, and improving in real time\",\"spans\":[],\"direction\":\"ltr\"}],\"meta_description\":[{\"type\":\"paragraph\",\"text\":\"Close the loop between shipping features and seeing results.\",\"spans\":[],\"direction\":\"ltr\"}],\"schema\":[],\"open_graph_image\":{\"dimensions\":{\"width\":1920,\"height\":1080},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/aLCdtGGNHVfTOarb_Blog_08-25_FeatureFeedbackLoop_1920x1080.png?auto=format,compress\",\"id\":\"aLCdtGGNHVfTOarb\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}}}},{\"id\":\"aKYJDxEAACMAc5xX\",\"uid\":\"auto-generating-openapi-documents-with-typescript-\",\"url\":\"/blog/auto-generating-openapi-documents-with-typescript-/\",\"type\":\"blog_post\",\"href\":\"https://launchdarkly.cdn.prismic.io/api/v2/documents/search?ref=aqRDsxYAADAAP-_K\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22aKYJDxEAACMAc5xX%22%29+%5D%5D\",\"tags\":[],\"first_publication_date\":\"2025-08-20T17:42:43+0000\",\"last_publication_date\":\"2025-08-20T17:42:43+0000\",\"slugs\":[\"auto-generating-openapi-documents-with-typescript-interfaces\"],\"linked_documents\":[],\"lang\":\"en-us\",\"alternate_languages\":[],\"data\":{\"is_preview_post\":false,\"title\":[{\"type\":\"heading1\",\"text\":\"Auto-generating OpenAPI documents with TypeScript interfaces\",\"spans\":[],\"direction\":\"ltr\"}],\"author\":{\"id\":\"YCr_NxIAACIAZP1e\",\"type\":\"author\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"launchdarkly\",\"first_publication_date\":\"2021-02-15T23:11:13+0000\",\"last_publication_date\":\"2025-08-14T18:56:59+0000\",\"uid\":\"launchdarkly\",\"url\":\"/blog/author/launchdarkly/\",\"link_type\":\"Document\",\"key\":\"11c80f5d-8fe1-46ab-a1e7-e44a35b9c712\",\"isBroken\":false},\"timestamp\":null,\"additional_authors\":[{\"additional_author\":{\"link_type\":\"Document\"}}],\"categories\":[{\"category\":{\"id\":\"Z5QhcBcAACkATlPb\",\"type\":\"category\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"developer-productivity\",\"first_publication_date\":\"2025-01-24T23:25:38+0000\",\"last_publication_date\":\"2025-01-24T23:25:38+0000\",\"uid\":\"developer-productivity\",\"url\":\"/blog/category/developer-productivity/\",\"data\":{\"category_name\":[{\"type\":\"heading1\",\"text\":\"Developer productivity\",\"spans\":[],\"direction\":\"ltr\"}]},\"link_type\":\"Document\",\"key\":\"a6329a1f-cdff-4260-b7f0-55800d4de457\",\"isBroken\":false}}],\"excerpt\":[],\"exclude_recent\":false,\"hide_date\":false,\"enable_table_of_content\":false,\"disable_related_content\":null,\"featured_image\":{\"dimensions\":{\"width\":3000,\"height\":1689},\"alt\":\"openapi and typescript logos\",\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly/aKYI7aTt2nPbai0y_Blog_08-25_Auto-generatingOpenAPIdocumentswithTypeScriptinterfaces.png?auto=format,compress\u0026rect=0,0,4000,2252\u0026w=3000\u0026h=1689\",\"id\":\"aKYI7aTt2nPbai0y\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"related_posts\":[{\"post\":{\"link_type\":\"Document\"}}],\"video_id\":[],\"video_type\":null,\"body\":[{\"primary\":{\"toc_title\":[],\"wysiwyg\":[{\"type\":\"paragraph\",\"text\":\"OpenAPI is a wonderful tool to explicitly document your REST API endpoints.\",\"spans\":[{\"start\":0,\"end\":7,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://learn.openapis.org/specification/paths.html\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"It’s also a particularly verbose YAML-based format that can be difficult to write by hand. Look at this “simple” example from the official docs. It’s almost as if the people who invented OpenAPI expected you to use a dedicated OpenAPI editor tool!\",\"spans\":[{\"start\":104,\"end\":120,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"about:blank\",\"target\":\"_blank\"}},{\"start\":167,\"end\":194,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://swagger.io/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"If you use TypeScript in your codebase, you might already have defined types such as request and response bodies for each of your endpoints:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nexport type CreateUserRequest = {\\n name: string;\\n email: string;\\n password: string;\\n}\\n\\nexport type CreateUserResponse = {\\n userId: string;\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"If you want to document your API with OpenAPI, you then need to carefully replicate this information in YAML format. This can be tedious and error-prone. Can we do better?\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"In fact, we can! Projects such as tsoa, Deepkit and Spot take your TypeScript code, run some magic, and spit out OpenAPI on the other end. How? We’re about to find out!\",\"spans\":[{\"start\":34,\"end\":38,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://tsoa-community.github.io/docs/\",\"target\":\"_blank\"}},{\"start\":40,\"end\":47,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://twitter.com/MarcJSchmidt/status/1555571803241717760\",\"target\":\"_blank\"}},{\"start\":52,\"end\":56,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/airtasker/spot\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"TypeScript Compiler API\",\"spans\":[{\"start\":0,\"end\":23,\"type\":\"strong\"}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"If you use TypeScript, you’re probably most familiar with the {code}tsc{/code} tool. However, the {code}typescript{/code} npm package offers much more than that. In particular, TypeScript lets you hook into its internals with the TypeScript Compiler API. Unlike the rest of the TypeScript project, this API is officially unstable. In practice, it’s however only seen minor breaking changes (see history). I’ve been using it since 2017, and I’ve only had to tweak my code once. Good job TypeScript team, as always :)\",\"spans\":[{\"start\":230,\"end\":253,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API\",\"target\":\"_blank\"}},{\"start\":391,\"end\":402,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/microsoft/TypeScript/wiki/API-Breaking-Changes\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"TypeScript Compiler API gives you the following functionality:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"parsing TypeScript source files and reading their AST (abstract syntax tree)\",\"spans\":[{\"start\":55,\"end\":75,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://en.wikipedia.org/wiki/Abstract_syntax_tree\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"type-checking TypeScript programs, with detailed access to syntactic and semantic errors\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"inspecting the inferred type of any particular node in the AST\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"transforming the AST and printing out the modified source code\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"list-item\",\"text\":\"doing all kinds of shenanigans with virtual files and so on (even type-checking code entirely in the browser!)\",\"spans\":[{\"start\":66,\"end\":108,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://tseditor.fwouts.com/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"For example, say we have the following TypeScript file:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\n// example.ts\\n\\nexport type MyType = {\\n foo: string;\\n bar: number;\\n};\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"We can use the following code to extract information about {code}MyType{/code}:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nimport path from \\\"path\\\";\\nimport ts from \\\"typescript\\\";\\n\\nconst mainEntryPoint = path.join(__dirname, \\\"example.ts\\\");\\nconst program = ts.createProgram([mainEntryPoint], {});\\nconst typeChecker = program.getTypeChecker()!;\\n\\n// Parse the main source file and look for type definitions.\\nconst sourceFile = program.getSourceFile(mainEntryPoint)!;\\nfor (const statement of sourceFile.statements) {\\n if (ts.isInterfaceDeclaration(statement)) {\\n console.log(`Encountered an interface named: ${statement.name.text}`);\\n const type = typeChecker.getTypeAtLocation(statement);\\n console.log(\\n `Properties: ${type\\n .getProperties()\\n .map((p) =\u003e p.name)\\n .join(\\\", \\\")}`\\n );\\n }\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"This will print the following:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nEncountered an interface named: MyType\\nProperties: foo, bar\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"We can go one step further and look at the type of each property:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nfor (const property of type.getProperties()) {\\n console.log(`Property: ${property.name}`);\\n console.log(typeChecker.getTypeAtLocation(property.valueDeclaration!));\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Here is the output:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nProperty: foo\\n{\\n flags: 4, // matches the value of ts.TypeFlags.String\\n id: 14,\\n intrinsicName: 'string',\\n objectFlags: 0\\n}\\nProperty: bar\\n{\\n flags: 8, // matches the value of ts.TypeFlags.Number\\n id: 15,\\n intrinsicName: 'number',\\n objectFlags: 0\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"This also works with more complex types such as arrays, unions, and so on. For example, when {code}type.isUnion(){/code} is {code}true{/code}, you can iterate through {code}type.types{/code} to check each possible type.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"We can go one step further and look at the inferred type of a particular variable. Say we have the following code:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\n// example.ts\\n\\nfunction f() {\\n return 123 as const;\\n}\\n\\nconst myVariable = f();\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"We can check the type of {code}myVariable{/code} with:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\nconst symbols = typeChecker.getSymbolsInScope(\\n sourceFile,\\n ts.SymbolFlags.Variable\\n);\\nconst symbol = symbols.find((s) =\u003e s.name == \\\"myVariable\\\")!;\\nconsole.log(\\n typeChecker.getTypeOfSymbolAtLocation(symbol, symbol.valueDeclaration!)\\n);\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"This will tell us that TypeScript inferred its type as the number literal {code}123{/code}:\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\n{\\n checker: ...\\n flags: 256, // matches the value of ts.TypeFlags.NumberLiteral\\n id: 87,\\n symbol: undefined,\\n value: 123,\\n regularType: ...\\n freshType: ...\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"This means that we can take any TypeScript code and introspect not only types, but also variables in the codebase.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"From TypeScript to OpenAPI\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Using this knowledge, it’s possible to transform TypeScript into JSON Schema, and by extension OpenAPI (which is 100% compatible with JSON Schema since v3.1).\",\"spans\":[{\"start\":65,\"end\":76,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://json-schema.org/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"We’re not going to implement this here because it would take a few thousand lines of code. Instead, let’s walk through how the open-source project {code}tsoa{/code} makes it all work.\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"First, let’s get familiar with the syntax that {code}tsoa{/code} uses and walk through the following example from the documentation:\",\"spans\":[{\"start\":114,\"end\":131,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://tsoa-community.github.io/docs/getting-started.html\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"preformatted\",\"text\":\"#shell\\n@Route(\\\"users\\\")\\nexport class UsersController extends Controller {\\n @Get(\\\"{userId}\\\")\\n public async getUser(\\n @Path() userId: number,\\n @Query() name?: string\\n ): Promise\u003cUser\u003e {\\n return new UsersService().get(userId, name);\\n }\\n\\n @SuccessResponse(\\\"201\\\", \\\"Created\\\") // Custom success response\\n @Post()\\n public async createUser(\\n @Body() requestBody: UserCreationParams\\n ): Promise\u003cvoid\u003e {\\n this.setStatus(201); // set return status 201\\n new UsersService().create(requestBody);\\n return;\\n }\\n}\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"How does {code}tsoa{/code} transform this into an OpenAPI document?\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"It all starts with the ControllerGenerator class, which takes a controller definition and uses TypeScript to inspect arguments passed to each decorator. This extracts useful metadata such as each endpoint’s path, its HTTP method, query parameters, and so on. Each method ({code}getUser{/code} and {code}createUser{/code} here) gets processed by the MethodGenerator class. Each method parameter (such as {code}userId{/code}, {code}name{/code} and {code}requestBody{/code}) is in turn processed by the ParameterGenerator class.\",\"spans\":[{\"start\":23,\"end\":48,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/lukeautry/tsoa/blob/8d23f961621a6ae67a2498525d2e6766dc5faf6b/packages/cli/src/metadataGeneration/controllerGenerator.ts\",\"target\":\"_blank\"}},{\"start\":349,\"end\":370,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/lukeautry/tsoa/blob/8d23f961621a6ae67a2498525d2e6766dc5faf6b/packages/cli/src/metadataGeneration/methodGenerator.ts\",\"target\":\"_blank\"}},{\"start\":500,\"end\":524,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/lukeautry/tsoa/blob/64f0885dc692c7bddc0d45c96c30ce0a6dc277c9/packages/cli/src/metadataGeneration/parameterGenerator.ts\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The real magic happens in the TypeResolver class, where the type of each parameter is resolved and converted to {code}tsoa{/code}'s internal type model. This is where the TypeScript Compiler API really comes into play. Looking at the code, you can see that covering every possible type isn’t easy. That’s already a thousand lines of code, albeit very well-structured and readable.\",\"spans\":[{\"start\":30,\"end\":48,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/lukeautry/tsoa/blob/8d23f961621a6ae67a2498525d2e6766dc5faf6b/packages/cli/src/metadataGeneration/typeResolver.ts\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Once the code has been processed through the {code}ControllerGenerator{/code} using the {code}TypeResolver{/code}, {code}tsoa{/code} has all the metadata it needs to output the corresponding OpenAPI document. Now, it’s just a matter of converting the metadata to the right format and output it as YAML. This happens in the generateSpec() method, which in the case of OpenAPI 3 will invoke the SpecGenerator3 class. All that class does is convert from tsoa's internal metadata format to the official OpenAPI 3 specification.\",\"spans\":[{\"start\":323,\"end\":344,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/lukeautry/tsoa/blob/8d23f961621a6ae67a2498525d2e6766dc5faf6b/packages/cli/src/module/generate-spec.ts#L17\",\"target\":\"_blank\"}},{\"start\":393,\"end\":413,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://github.com/lukeautry/tsoa/blob/8d23f961621a6ae67a2498525d2e6766dc5faf6b/packages/cli/src/swagger/specGenerator3.ts#L18\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"The cherry on top: automatic request validation\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"The beauty of a tool such as {code}tsoa{/code} is that it provides not only OpenAPI document generation, but also the ability to automatically validate incoming requests (see documentation). If a client attempts to send a payload field with a {code}number{/code} when it should be a {code}string{/code} for example, an error will be thrown before the endpoint is executed. We don’t need to write any validation code ourselves; that comes out of the box thanks to the types inferred by {code}tsoa{/code} with the TypeScript Compiler API.\",\"spans\":[{\"start\":171,\"end\":188,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://tsoa-community.github.io/docs/error-handling.html#handling-validation-errors\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"While an invalid request could come from a malicious hacker trying to break your API, it could also very well be an error in your client code. This is where Highlight comes in. When an error is thrown, not only can you see the server-side error stack in Highlight, but you’ll be able to replay the session that led to this bug in the first place from the user’s perspective. Knowing what circumstances led to a particular bug can be essential to fix it!\",\"spans\":[{\"start\":157,\"end\":166,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://highlight.io/\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"heading2\",\"text\":\"What will you use the TypeScript Compiler API for?\",\"spans\":[],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"Generating OpenAPI documents is but one possible application of the TypeScript Compiler API. You could also use it to generate forms from types automatically, to auto-generate React component properties, and so on.\",\"spans\":[{\"start\":118,\"end\":157,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://tseditor.fwouts.com/\",\"target\":\"_blank\"}},{\"start\":162,\"end\":202,\"type\":\"hyperlink\",\"data\":{\"link_type\":\"Web\",\"url\":\"https://previewjs.com/docs/features/autogenerated-props\",\"target\":\"_blank\"}}],\"direction\":\"ltr\"},{\"type\":\"paragraph\",\"text\":\"What will you use the TypeScript Compiler API for? We're interested to see what you do.\",\"spans\":[],\"direction\":\"ltr\"}]},\"items\":[],\"id\":\"wysiwyg$52879a63-552e-41e4-bda9-0f49f711dd62\",\"slice_type\":\"wysiwyg\",\"slice_label\":null}],\"meta_title\":[{\"type\":\"heading1\",\"text\":\"Auto-generating OpenAPI documents with TypeScript interfaces\",\"spans\":[],\"direction\":\"ltr\"}],\"meta_description\":[],\"schema\":[],\"open_graph_image\":{}}}],\"title\":\"Related Content\",\"seeAllLink\":\"/blog/category/developer-productivity\",\"isNewBlogStyle\":true,\"extraWideCard\":true,\"perPage\":4,\"perPageTablet\":2,\"noFlex\":true,\"theme\":\"dark\",\"seeAllText\":\"See all posts on developer productivity\"}]}]\n"])</script><script>self.__next_f.push([1,"42:[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__newsletterContainer\",\"children\":[\"$\",\"$L4b\",null,{}]}]\n"])</script><script>self.__next_f.push([1,"43:[\"$\",\"div\",null,{\"className\":\"styles-module__HXqOTa__g2BannerContainer\",\"children\":[\"$\",\"$L2c\",null,{\"href\":\"/g2-review/\",\"className\":\"styles-module__MISuva__blogG2Banner\",\"children\":[\"$\",\"div\",null,{\"className\":\"styles-module__MISuva__blogG2BannerInner\",\"children\":[[\"$\",\"div\",null,{\"children\":[\"$undefined\",[\"$\",\"img\",null,{\"className\":\"styles-module__MISuva__blogG2BannerImage\",\"src\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ainJTAeQX7-eXMEO_icon-bw--growing-up-arrow.svg\",\"alt\":\"Climbing up arrow\",\"width\":\"$undefined\",\"height\":\"$undefined\",\"loading\":\"lazy\",\"fetchPriority\":\"$undefined\",\"onClick\":\"$undefined\"}]]}],[\"$\",\"div\",null,{\"className\":\"styles-module__MISuva__blogG2BannerContent\",\"children\":[\"$\",\"h4\",null,{\"className\":\"styles-module__J0n02W__variant_h4 styles-module__J0n02W__color_white styles-module__J0n02W__weight_medium\",\"children\":\"LaunchDarkly Tops G2 Grid for Feature Management\"}]}],[\"$\",\"div\",null,{\"className\":\"styles-module__MISuva__blogG2BannerButton\",\"children\":[\"$\",\"button\",null,{\"className\":\"styles-module__d4f9cW__button styles-module__d4f9cW__variant_lime styles-module__d4f9cW__size_default\",\"style\":\"$undefined\",\"type\":\"button\",\"onClick\":\"$undefined\",\"ref\":\"$undefined\",\"children\":[[\"$\",\"span\",null,{\"className\":\"styles-module__d4f9cW__label\",\"children\":\"Learn more\"}],[\"$\",\"span\",null,{\"className\":\"styles-module__d4f9cW__arrowBox false\",\"children\":[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":16,\"height\":12,\"fill\":\"none\",\"className\":\"styles-module__d4f9cW__arrow\",\"aria-hidden\":\"true\",\"children\":\"$24:2:props:children:1:props:children:props:children:1:props:children:0:props:children:2:props:children:1:props:children:props:children\"}]}]]}]}]]}]}]}]\n"])</script><script>self.__next_f.push([1,"50:T445,"])</script><script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"@id\":\"https://launchdarkly.com/testing-in-production-for-safety-and-sanity/#article\",\"about\":[{\"@type\":\"Thing\",\"name\":\"Testing in Production to Stay Safe and Sensible - LaunchDarkly\"}],\"author\":[{\"@type\":\"Person\",\"name\":\"Heidi Waterhouse\",\"url\":\"https://launchdarkly.com/blog/author/heidiw/\"}],\"datePublished\":\"2021-03-18T17:36:23.000Z\",\"dateModified\":\"2026-09-04T20:56:16.000Z\",\"headline\":\"Testing in Production to Stay Safe and Sensible - LaunchDarkly\",\"description\":\"Testing software changes in a real-world production environment is essential to modern development. Learn how to test in production safely with feature flags using a feature management platform.\",\"image\":{\"@type\":\"ImageObject\",\"url\":\"https://images.prismic.io/launchdarkly/f44cc827-b177-4531-8dc0-25a0ed02bcc9_Testing+in+production+to+stay+safe+and+sensible.png?auto=compress,format\"},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://launchdarkly.com/testing-in-production-for-safety-and-sanity/#webpage\"},\"publisher\":{\"@id\":\"https://launchdarkly.com/#organization\"}}"])</script><script>self.__next_f.push([1,"44:[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$50\"}}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Organization\\\",\\\"@id\\\":\\\"https://launchdarkly.com/#organization\\\",\\\"name\\\":\\\"LaunchDarkly\\\",\\\"legalName\\\":\\\"LaunchDarkly\\\",\\\"description\\\":\\\"LaunchDarkly helps teams safely manage code and AI agents in production with feature flags, progressive delivery, automated rollback, and runtime control.\\\",\\\"url\\\":\\\"https://launchdarkly.com/\\\",\\\"logo\\\":{\\\"@type\\\":\\\"ImageObject\\\",\\\"url\\\":\\\"https://launchdarkly.com/schema-icon.png\\\",\\\"width\\\":\\\"512\\\",\\\"height\\\":\\\"512\\\"},\\\"sameAs\\\":[\\\"https://twitter.com/LaunchDarkly\\\",\\\"https://www.linkedin.com/company/launchdarkly\\\",\\\"https://github.com/launchdarkly\\\"]}\"}}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BreadcrumbList\\\",\\\"description\\\":\\\"Breadcrumbs list\\\",\\\"name\\\":\\\"Breadcrumbs\\\",\\\"itemListElement\\\":[{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":1,\\\"name\\\":\\\"Home\\\",\\\"item\\\":\\\"https://launchdarkly.com/\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":2,\\\"name\\\":\\\"Blog\\\",\\\"item\\\":\\\"https://launchdarkly.com/blog\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":3,\\\"name\\\":\\\"Testing in Production to Stay Safe and Sensible - LaunchDarkly\\\",\\\"item\\\":\\\"https://launchdarkly.com/testing-in-production-for-safety-and-sanity/\\\"}]}\"}}]]\n"])</script><script>self.__next_f.push([1,"45:[\"$\",\"$L51\",null,{\"data\":{\"primary\":{\"heading\":\"Resources to get started.\",\"readMoreLabel\":\"\",\"readMoreHref\":\"\",\"imageAspectRatio\":\"16:9\",\"background\":\"black\"},\"items\":[{\"title\":\"Check out the blog.\",\"eyebrow\":\"Blog\",\"description\":\"Read about LaunchDarkly news, product updates, and more.\",\"image\":\"https://images.prismic.io/launchdarkly-marketingsite/agtlhaYofJOwHWAR_img-res-card--BLOG.png?auto=format,compress\",\"href\":\"/blog/\"},{\"title\":\"Explore our docs.\",\"eyebrow\":\"Docs\",\"description\":\"Learn best practices for getting started with LaunchDarkly.\",\"image\":\"https://images.prismic.io/launchdarkly-marketingsite/agtlhqYofJOwHWAS_img-res-card--DOCS.png?auto=format,compress\",\"href\":\"https://launchdarkly.com/docs/home\"},{\"title\":\"Watch on demand.\",\"eyebrow\":\"Videos\",\"description\":\"Check out demos and tutorials to see LaunchDarkly in action.\",\"image\":\"https://images.prismic.io/launchdarkly-marketingsite/agtliKYofJOwHWAU_img-res-card--VIDEOS.png?auto=format,compress\",\"href\":\"https://www.youtube.com/@LaunchDarkly\"},{\"title\":\"Connect at events.\",\"eyebrow\":\"Events\",\"description\":\"Explore ways to connect with us in person and virtually.\",\"image\":\"https://images.prismic.io/launchdarkly-marketingsite/agtlh6YofJOwHWAT_img-res-card--Events.png?auto=format,compress\",\"href\":\"/events-webinars/\"}]},\"customCommands\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"31:[\"$\",\"$L30\",null,{\"navigationDocument\":{\"id\":\"Z8jwdRIAACIAchAL\",\"uid\":null,\"url\":null,\"type\":\"main_navigation\",\"href\":\"https://launchdarkly-marketingsite.cdn.prismic.io/api/v2/documents/search?ref=aqQbiREAACwA_PkJ\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22Z8jwdRIAACIAchAL%22%29+%5D%5D\",\"tags\":[],\"first_publication_date\":\"2025-03-06T23:22:48+0000\",\"last_publication_date\":\"2026-08-12T21:50:57+0000\",\"slugs\":[\"main-navigation\"],\"linked_documents\":[],\"lang\":\"en-us\",\"alternate_languages\":[],\"data\":{\"products_group\":[{\"icon\":{\"dimensions\":{\"width\":24,\"height\":24},\"alt\":null,\"copyright\":null,\"url\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aCQJEidWJ-7kSC2w_icon--guarded-release-x24.svg\",\"id\":\"aCQJEidWJ-7kSC2w\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ZkT8yxcAACQAayzv\",\"type\":\"broken_type\",\"tags\":[],\"lang\":null,\"slug\":\"-\",\"first_publication_date\":null,\"last_publication_date\":null,\"link_type\":\"Document\",\"key\":\"eb9e562d-4750-4567-8060-b0378a8012b7\",\"isBroken\":true},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Guarded Releases\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Monitor and de-risk.\",\"spans\":[],\"direction\":\"ltr\"}],\"hover_class\":[{\"type\":\"paragraph\",\"text\":\"releases\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":24,\"height\":24},\"alt\":null,\"copyright\":null,\"url\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aCQJESdWJ-7kSC2v_icon--experimentation-x24.svg\",\"id\":\"aCQJESdWJ-7kSC2v\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ZS3e3xAAACYArUv0\",\"type\":\"broken_type\",\"tags\":[],\"lang\":null,\"slug\":\"-\",\"first_publication_date\":null,\"last_publication_date\":null,\"link_type\":\"Document\",\"key\":\"859b7068-0b26-4b9b-be95-730781ae8e60\",\"isBroken\":true},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Experimentation\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Make data-driven decisions.\",\"spans\":[],\"direction\":\"ltr\"}],\"hover_class\":[{\"type\":\"paragraph\",\"text\":\"experimentation\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":24,\"height\":24},\"alt\":null,\"copyright\":null,\"url\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aYTW2d0YXLCxVdmZ_observability-icon-pink-gradient.svg\",\"id\":\"aYTW2d0YXLCxVdmZ\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"aXzdMhEAACEAbMS3\",\"type\":\"broken_type\",\"tags\":[],\"lang\":null,\"slug\":\"-\",\"first_publication_date\":null,\"last_publication_date\":null,\"link_type\":\"Document\",\"key\":\"a6113607-80f4-45f3-9d88-a7f9cd5474ad\",\"isBroken\":true},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Observability\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Detect, diagnose, and recover.\",\"spans\":[],\"direction\":\"ltr\"}],\"hover_class\":[{\"type\":\"paragraph\",\"text\":\"releases\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":24,\"height\":24},\"alt\":null,\"copyright\":null,\"url\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aCQJEydWJ-7kSC2x_icon--release-management-x24.svg\",\"id\":\"aCQJEydWJ-7kSC2x\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ZK7UUREAACQAMsBn\",\"type\":\"broken_type\",\"tags\":[],\"lang\":null,\"slug\":\"-\",\"first_publication_date\":null,\"last_publication_date\":null,\"link_type\":\"Document\",\"key\":\"bd2dad2e-cc7c-47a4-9c6b-d14e00a62722\",\"isBroken\":true},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Feature Flags\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Scale great release processes.\",\"spans\":[],\"direction\":\"ltr\"}],\"hover_class\":[{\"type\":\"paragraph\",\"text\":\"release-management\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":24,\"height\":24},\"alt\":null,\"copyright\":null,\"url\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/aCQJECdWJ-7kSC2u_icon--ai-x24.svg\",\"id\":\"aCQJECdWJ-7kSC2u\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"aScrdxIAACUA_zBM\",\"type\":\"broken_type\",\"tags\":[],\"lang\":null,\"slug\":\"-\",\"first_publication_date\":null,\"last_publication_date\":null,\"link_type\":\"Document\",\"key\":\"e1c3e064-69c5-4a8a-9e6d-d47afa6f9a84\",\"isBroken\":true},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"AI Configs\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Make innovative AI products.\",\"spans\":[],\"direction\":\"ltr\"}],\"hover_class\":[{\"type\":\"paragraph\",\"text\":\"ai\",\"spans\":[],\"direction\":\"ltr\"}]}],\"overview_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agwNv6YofJOwHWkd_platform-overview-icon.png?auto=format,compress\",\"id\":\"agwNv6YofJOwHWkd\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agT1iRIAACMAW09R\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"the-runtime-control-layer-for-the-ai-era.\",\"first_publication_date\":\"2026-05-13T22:07:57+0000\",\"last_publication_date\":\"2026-07-29T17:52:40+0000\",\"uid\":\"how-it-works.platform\",\"url\":\"/how-it-works.platform/\",\"link_type\":\"Document\",\"key\":\"cb51a2ac-66b9-445c-add5-1bfd126fdaf1\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Platform overview\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpNAKYofJOwHTuE_icon-main-nav--FeatureManagement.png?auto=format,compress\",\"id\":\"agpNAKYofJOwHTuE\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agJOJRIAACMAV0KE\",\"type\":\"ai_refresh_pages\",\"tags\":[\"how it works\",\"AI Refresh\"],\"lang\":\"en-us\",\"slug\":\"feature-flags-for-real-time-control-in-production.\",\"first_publication_date\":\"2026-05-11T23:18:47+0000\",\"last_publication_date\":\"2026-07-09T17:32:44+0000\",\"uid\":\"how-it-works.feature-flags\",\"url\":\"/how-it-works.feature-flags/\",\"link_type\":\"Document\",\"key\":\"5b39f1f4-c3e9-4985-a6f4-09d007cdc71a\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Feature flags\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpNA6YofJOwHTuH_icon-main-nav--Observability.png?auto=format,compress\",\"id\":\"agpNA6YofJOwHTuH\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agUqVRIAACEAW5iJ\",\"type\":\"ai_refresh_pages\",\"tags\":[\"how it works\",\"AI Refresh\"],\"lang\":\"en-us\",\"slug\":\"observe-at-the-scale-that-you\",\"first_publication_date\":\"2026-05-14T02:28:03+0000\",\"last_publication_date\":\"2026-07-16T18:41:10+0000\",\"uid\":\"how-it-works.observability\",\"url\":\"/how-it-works.observability/\",\"link_type\":\"Document\",\"key\":\"fb0b6ba7-0f91-4639-a80e-a08103edd108\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Observability\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpM_6YofJOwHTuD_icon-main-nav--Experimentation.png?auto=format,compress\",\"id\":\"agpM_6YofJOwHTuD\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agT6fRIAAI1IW1Zl\",\"type\":\"ai_refresh_pages\",\"tags\":[\"how it works\",\"AI Refresh\"],\"lang\":\"en-us\",\"slug\":\"optimize-at-the-speed-that-you\",\"first_publication_date\":\"2026-05-13T23:15:56+0000\",\"last_publication_date\":\"2026-08-12T00:12:40+0000\",\"uid\":\"how-it-works.experimentation\",\"url\":\"/how-it-works.experimentation/\",\"link_type\":\"Document\",\"key\":\"026bc403-ba2c-4c10-a9a7-28dc7beb9c0e\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Experimentation\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpM_qYofJOwHTuC_icon-main-nav--Agentintegrations.png?auto=format,compress\",\"id\":\"agpM_qYofJOwHTuC\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agPiLhIAACEAWZ_F\",\"type\":\"ai_refresh_pages\",\"tags\":[\"how it works\",\"Agent Integration\"],\"lang\":\"en-us\",\"slug\":\"go-agent-native-from-day-1.\",\"first_publication_date\":\"2026-05-13T03:45:19+0000\",\"last_publication_date\":\"2026-07-02T20:40:47+0000\",\"uid\":\"how-it-works.agent-integrations\",\"url\":\"/how-it-works.agent-integrations/\",\"link_type\":\"Document\",\"key\":\"96423778-717a-4a35-b3d1-2966c0f15a99\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Agent integrations\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpNAqYofJOwHTuG_icon-main-nav--Integrations.png?auto=format,compress\",\"id\":\"agpNAqYofJOwHTuG\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agXnzxIAAGfYXLYC\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"integrations\",\"first_publication_date\":\"2026-05-14T15:21:28+0000\",\"last_publication_date\":\"2026-05-19T04:39:17+0000\",\"uid\":\"integrations\",\"url\":\"/integrations/\",\"link_type\":\"Document\",\"key\":\"ac21f49d-de49-4c8f-9cab-03ff74f3aeae\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Integrations\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpNAaYofJOwHTuF_icon-main-nav--Infrastructure.png?auto=format,compress\",\"id\":\"agpNAaYofJOwHTuF\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agstuhIAAGVsZG8v\",\"type\":\"ai_refresh_pages\",\"tags\":[\"how it works\",\"platform architecture\"],\"lang\":\"en-us\",\"slug\":\"built-for-runtime-control-at-scale.\",\"first_publication_date\":\"2026-05-18T15:48:56+0000\",\"last_publication_date\":\"2026-05-20T21:04:24+0000\",\"uid\":\"how-it-works.platform-architecture\",\"url\":\"/how-it-works.platform-architecture/\",\"link_type\":\"Document\",\"key\":\"654903e7-c950-4ee9-ad8d-28ced3798a0e\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Architecture\",\"spans\":[],\"direction\":\"ltr\"}]}],\"by_team_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpOrqYofJOwHTuK_icon-main-nav--ReleaseAI-BuiltCode.png?auto=format,compress\",\"id\":\"agpOrqYofJOwHTuK\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agZggxIAAGfYXWgr\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"ai-coded-it-but-you-own-it-in-production.-stay-in-control.\",\"first_publication_date\":\"2026-05-14T23:57:25+0000\",\"last_publication_date\":\"2026-07-15T15:24:08+0000\",\"uid\":\"solutions.release-ai-built-code\",\"url\":\"/solutions.release-ai-built-code/\",\"link_type\":\"Document\",\"key\":\"89e8e1ad-db87-4479-aeec-83186124bc80\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Release AI-built code\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpOrKYofJOwHTuI_icon-main-nav--ControlAIAgents.png?auto=format,compress\",\"id\":\"agpOrKYofJOwHTuI\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agVNRxIAACEAW8p2\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"agents-make-decisions-you-own-the-results.-stay-in-control.\",\"first_publication_date\":\"2026-05-14T04:20:19+0000\",\"last_publication_date\":\"2026-07-15T15:24:56+0000\",\"uid\":\"solutions.control-ai-agents\",\"url\":\"/solutions.control-ai-agents/\",\"link_type\":\"Document\",\"key\":\"c8ca2188-6dd5-4f79-b127-b32bd5afcc49\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Control AI agents\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpOraYofJOwHTuJ_icon-main-nav--OptimizeAIPerformance%26Cost.png?auto=format,compress\",\"id\":\"agpOraYofJOwHTuJ\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agZehRIAACEAXWU6\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"stop-guessing.-optimize-model-performance-and-cost-in-real-time.\",\"first_publication_date\":\"2026-05-14T23:47:53+0000\",\"last_publication_date\":\"2026-07-15T15:25:55+0000\",\"uid\":\"solutions.optimize-ai-performance\",\"url\":\"/solutions.optimize-ai-performance/\",\"link_type\":\"Document\",\"key\":\"57b0c941-034c-46e0-80ef-722178945659\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Optimize AI performance \u0026 cost\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpOsKYofJOwHTuM_icon-main-nav--Self-HealSystems.png?auto=format,compress\",\"id\":\"agpOsKYofJOwHTuM\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agVxxxIAAI1IW_7K\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"stop-responding-and-automatically-fix-problems-in-production.\",\"first_publication_date\":\"2026-05-14T07:01:00+0000\",\"last_publication_date\":\"2026-07-07T00:03:00+0000\",\"uid\":\"solutions.self-heal-systems\",\"url\":\"/solutions.self-heal-systems/\",\"link_type\":\"Document\",\"key\":\"a777ddee-a6f5-485b-8cb0-df55680e5bd3\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Self-heal systems\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpOr6YofJOwHTuL_icon-main-nav--RunExperiments.png?auto=format,compress\",\"id\":\"agpOr6YofJOwHTuL\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agZhwBIAACMAXWoU\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"experiment-at-ai-scale-without-losing-control.\",\"first_publication_date\":\"2026-05-15T00:01:50+0000\",\"last_publication_date\":\"2026-07-15T15:28:25+0000\",\"uid\":\"solutions.run-experiments\",\"url\":\"/solutions.run-experiments/\",\"link_type\":\"Document\",\"key\":\"0c20b758-07ba-4180-9002-028f2eb0c933\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Run experiments\",\"spans\":[],\"direction\":\"ltr\"}]}],\"by_industry_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpQmaYofJOwHTuS_icon-main-nav--AIEngineer.png?auto=format,compress\",\"id\":\"agpQmaYofJOwHTuS\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"af-1HRIAACEAU2aQ\",\"type\":\"ai_refresh_pages\",\"tags\":[\"AI Refresh\",\"Persona\",\"AI Engineer\"],\"lang\":\"en-us\",\"slug\":\"agents-break-in-production.-thats-where-control-matters.\",\"first_publication_date\":\"2026-05-09T23:06:03+0000\",\"last_publication_date\":\"2026-05-20T21:03:40+0000\",\"uid\":\"persona.ai-engineers\",\"url\":\"/persona.ai-engineers/\",\"link_type\":\"Document\",\"key\":\"fe8f38e4-584c-451d-b926-af442c252bea\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"AI engineers\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpQmqYofJOwHTuT_icon-main-nav--Developers.png?auto=format,compress\",\"id\":\"agpQmqYofJOwHTuT\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agaOnBIAACMAXamc\",\"type\":\"ai_refresh_pages\",\"tags\":[\"AI Refresh\",\"Persona\",\"development teams\"],\"lang\":\"en-us\",\"slug\":\"ship-faster.-stay-in-control.-fix-problems-automatically.\",\"first_publication_date\":\"2026-05-15T03:39:15+0000\",\"last_publication_date\":\"2026-08-27T20:30:26+0000\",\"uid\":\"persona.development-teams\",\"url\":\"/persona.development-teams/\",\"link_type\":\"Document\",\"key\":\"dc747045-cd9a-4d86-aec3-d00c036dff99\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Developers\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpQm6YofJOwHTuU_icon-main-nav--DevOps-SRE.png?auto=format,compress\",\"id\":\"agpQm6YofJOwHTuU\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agaRwhIAAGfYXa5B\",\"type\":\"ai_refresh_pages\",\"tags\":[\"AI Refresh\",\"Persona\",\"devops\"],\"lang\":\"en-us\",\"slug\":\"prevent-incidents.fix-problems-automatically.\",\"first_publication_date\":\"2026-05-15T03:39:15+0000\",\"last_publication_date\":\"2026-08-18T18:21:56+0000\",\"uid\":\"persona.devops-site-reliability-engineer-teams\",\"url\":\"/persona.devops-site-reliability-engineer-teams/\",\"link_type\":\"Document\",\"key\":\"95bbe00c-5ed4-4caf-a18e-830cfa416ced\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"DevOps \u0026 SRE\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpQnaYofJOwHTuW_icon-main-nav--ProductManagers.png?auto=format,compress\",\"id\":\"agpQnaYofJOwHTuW\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agaJuhIAAGfYXaJy\",\"type\":\"ai_refresh_pages\",\"tags\":[\"AI Refresh\",\"Persona\",\"product managers\"],\"lang\":\"en-us\",\"slug\":\"launch-confidently.-learn-what-works.-improve-continuously.\",\"first_publication_date\":\"2026-05-15T03:39:15+0000\",\"last_publication_date\":\"2026-05-19T01:10:37+0000\",\"uid\":\"persona.product-managers\",\"url\":\"/persona.product-managers/\",\"link_type\":\"Document\",\"key\":\"aaa44826-4691-462b-a8a1-acc80ad8fbdb\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Product managers\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/8Rpfg-gh7BMefouu_persona-data-scientist-icon-nav.png?auto=format,compress\",\"id\":\"8Rpfg-gh7BMefouu\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"alem8REAACwAC87h\",\"type\":\"ai_refresh_pages\",\"tags\":[\"AI Refresh\",\"Persona\",\"data scientists\"],\"lang\":\"en-us\",\"slug\":\"run-experiments-you-can-actually-trust.\",\"first_publication_date\":\"2026-07-15T18:45:45+0000\",\"last_publication_date\":\"2026-07-17T19:14:06+0000\",\"uid\":\"persona.data-scientists\",\"url\":\"/persona.data-scientists/\",\"link_type\":\"Document\",\"key\":\"f7bf52f5-fab6-4ea1-9d9c-e319463a6190\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Data scientists\",\"spans\":[],\"direction\":\"ltr\"}]}],\"learn_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSN6YofJOwHTud_icon-main-nav--Blog.png?auto=format,compress\",\"id\":\"agpSN6YofJOwHTud\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"9ad95dc9-c5ec-4aab-ac8a-7b7405aec915\",\"url\":\"https://launchdarkly.com/blog/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Blog\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSOaYofJOwHTuf_icon-main-nav--GuidesandEbooks.png?auto=format,compress\",\"id\":\"agpSOaYofJOwHTuf\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"1b0edfb5-d056-42ae-a4c2-dd530e49f057\",\"url\":\"https://launchdarkly.com/guides/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Guides \u0026 ebooks\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSOKYofJOwHTue_icon-main-nav--EventsandWebinars.png?auto=format,compress\",\"id\":\"agpSOKYofJOwHTue\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"YQxWXxIAACkAIPjQ\",\"type\":\"events\",\"tags\":[\"events\",\"webinars\"],\"lang\":\"en-us\",\"slug\":\"events\",\"first_publication_date\":\"2021-08-05T21:26:24+0000\",\"last_publication_date\":\"2026-09-11T15:17:28+0000\",\"uid\":\"events-webinars\",\"url\":\"/events-webinars/\",\"link_type\":\"Document\",\"key\":\"d1154925-59b3-4c22-afcc-e0efad605e91\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Events \u0026 webinars\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSOqYofJOwHTug_icon-main-nav--Videos.png?auto=format,compress\",\"id\":\"agpSOqYofJOwHTug\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"c4b22447-de6e-4d1e-9b7a-11748b8055aa\",\"url\":\"https://www.youtube.com/@LaunchDarkly\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Videos\",\"spans\":[],\"direction\":\"ltr\"}]}],\"success_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSQ6YofJOwHTui_icon-main-nav--Academy.png?auto=format,compress\",\"id\":\"agpSQ6YofJOwHTui\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"8a7c9deb-617c-4160-adeb-5b432b051ecf\",\"url\":\"https://academy.launchdarkly.com/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Academy\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSRKYofJOwHTuj_icon-main-nav--CustomerStories.png?auto=format,compress\",\"id\":\"agpSRKYofJOwHTuj\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ajGF7RcAADAA88aj\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"trusted-by-industry-leading-teams.\",\"first_publication_date\":\"2026-06-16T17:59:03+0000\",\"last_publication_date\":\"2026-06-23T21:13:13+0000\",\"uid\":\"customer-stories\",\"url\":\"/customer-stories/\",\"link_type\":\"Document\",\"key\":\"d11dbfa0-bb2d-461c-b5c3-03e978db76b6\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Customer stories\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSRqYofJOwHTul_icon-main-nav--ProfessionalServices.png?auto=format,compress\",\"id\":\"agpSRqYofJOwHTul\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ZSgkThAAACcAC-sT\",\"type\":\"new_pages\",\"tags\":[\"services\",\"professional services\"],\"lang\":\"en-us\",\"slug\":\"launchdarkly-professional-services\",\"first_publication_date\":\"2023-10-12T16:52:47+0000\",\"last_publication_date\":\"2026-07-08T15:43:17+0000\",\"uid\":\"services\",\"url\":\"/services/\",\"link_type\":\"Document\",\"key\":\"93fcdada-dd96-49ca-b8f3-a466eb109f19\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Professional services\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSRaYofJOwHTuk_icon-main-nav--Partners.png?auto=format,compress\",\"id\":\"agpSRaYofJOwHTuk\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"ZMggHhEAACYAn2e4\",\"type\":\"new_pages\",\"tags\":[\"partner program\",\"partner program page\"],\"lang\":\"en-us\",\"slug\":\"lets-build-better-software-together.\",\"first_publication_date\":\"2023-07-31T21:59:14+0000\",\"last_publication_date\":\"2026-07-08T15:56:45+0000\",\"uid\":\"partner-program\",\"url\":\"/partner-program/\",\"link_type\":\"Document\",\"key\":\"c693eb6c-d924-4446-98dc-e50e30a73e31\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Partners\",\"spans\":[],\"direction\":\"ltr\"}]}],\"get_help_group\":[{\"icon\":{\"dimensions\":{\"width\":160,\"height\":160},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpTiKYofJOwHTu2_icon-main-nav--help-center.png?auto=format,compress\",\"id\":\"agpTiKYofJOwHTu2\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"671d49cc-49d6-4614-90a4-3c31313a2f47\",\"url\":\"https://support.launchdarkly.com/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Help Center\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Explore help topics for everything LaunchDarkly.\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":160,\"height\":160},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpTiaYofJOwHTu3_icon-main-nav--request-support.png?auto=format,compress\",\"id\":\"agpTiaYofJOwHTu3\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"b1c38405-1e18-4080-81ee-a86756bec156\",\"url\":\"https://support.launchdarkly.com/hc/en-us/requests/new?ticket_form_id=360000836893\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Request support\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Reach out to us for direct answers to your questions.\",\"spans\":[],\"direction\":\"ltr\"}]}],\"resources_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSVKYofJOwHTuo_icon-main-nav--DocsHome.png?auto=format,compress\",\"id\":\"agpSVKYofJOwHTuo\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"79ea2804-386d-45ba-ae92-9de4e6a20aa2\",\"url\":\"https://launchdarkly.com/docs/home\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Docs home\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSVaYofJOwHTup_icon-main-nav--FeatureFlagQuickstart.png?auto=format,compress\",\"id\":\"agpSVaYofJOwHTup\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"d55987b1-30ac-4d93-907a-c50f827814d5\",\"url\":\"https://launchdarkly.com/docs/home/getting-started\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Feature flags Quickstart\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSUqYofJOwHTum_icon-main-nav--AIConfigsQuickstart.png?auto=format,compress\",\"id\":\"agpSUqYofJOwHTum\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"f3e899b1-5149-4b7f-a205-8d8be0d0d0ca\",\"url\":\"https://launchdarkly.com/docs/home/agentcontrol/quickstart\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"AgentControl Quickstart\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSU6YofJOwHTun_icon-main-nav--APIDocs.png?auto=format,compress\",\"id\":\"agpSU6YofJOwHTun\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"98e0f384-0d91-4ddc-b989-908d24e47a4d\",\"url\":\"https://launchdarkly.com/docs/api/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"API docs\",\"spans\":[],\"direction\":\"ltr\"}]}],\"workflow_group\":[{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSZqYofJOwHTut_icon-main-nav--Productupdates.png?auto=format,compress\",\"id\":\"agpSZqYofJOwHTut\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"daebf9c5-8c24-4a14-9df2-0a7f80d7dfce\",\"url\":\"https://launchdarkly.com/changelog/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Product Updates\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSZaYofJOwHTus_icon-main-nav--PowerAnalysisCalculator.png?auto=format,compress\",\"id\":\"agpSZaYofJOwHTus\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"4a2ede12-b83e-4114-bbc3-4a738b3d8ccb\",\"url\":\"https://launchdarkly.com/sample-size-calculator/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Power analysis calculator\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSZKYofJOwHTur_icon-main-nav--FlagshipEngineeringBlog.png?auto=format,compress\",\"id\":\"agpSZKYofJOwHTur\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"0eb1c344-46c1-466a-bc84-f3bb4c46290b\",\"url\":\"https://launchdarkly.com/docs/blog\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Flagship engineering blog\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":48,\"height\":48},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpSY6YofJOwHTuq_icon-main-nav--Community.png?auto=format,compress\",\"id\":\"agpSY6YofJOwHTuq\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"link_type\":\"Web\",\"key\":\"84663d21-e4f8-4631-81cd-6da440a8b828\",\"url\":\"https://launchdarkly.com/community/\"},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"Community\",\"spans\":[],\"direction\":\"ltr\"}]}],\"banner_group\":[{\"banner_image\":{},\"banner_left_image\":{\"dimensions\":{\"width\":267,\"height\":180},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/aatGU1xvIZEnjb9J_top-nav-moving-at-ai-speed.png?auto=format,compress\",\"id\":\"aatGU1xvIZEnjb9J\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"banner_subtitle_icon\":{},\"banner_position\":\"Bottom\",\"banner_location\":\"Solutions\",\"banner_subtitle\":[{\"type\":\"paragraph\",\"text\":\"Move at AI speed. Stay in control.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_body\":[{\"type\":\"paragraph\",\"text\":\"See how to release, experiment, observe and control AI.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link_text\":[{\"type\":\"paragraph\",\"text\":\"Watch demo now\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link\":{\"link_type\":\"Web\",\"key\":\"bdb970f8-f1f4-424b-ae6b-5160b38903a2\",\"url\":\"https://launchdarkly.com/product-demo/platform-overview/\"}},{\"banner_image\":{},\"banner_left_image\":{\"dimensions\":{\"width\":267,\"height\":180},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/aatGU1xvIZEnjb9J_top-nav-moving-at-ai-speed.png?auto=format,compress\",\"id\":\"aatGU1xvIZEnjb9J\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"banner_subtitle_icon\":{},\"banner_position\":\"Bottom\",\"banner_location\":\"Resources\",\"banner_subtitle\":[{\"type\":\"paragraph\",\"text\":\"Move at AI speed. Stay in control.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_body\":[{\"type\":\"paragraph\",\"text\":\"See how to release, experiment, observe and control AI.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link_text\":[{\"type\":\"paragraph\",\"text\":\"Watch demo\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link\":{\"link_type\":\"Web\",\"key\":\"4d1ad24c-3879-42e8-86de-2ab76c2778ad\",\"url\":\"https://launchdarkly.com/product-demo/platform-overview/\"}},{\"banner_image\":{},\"banner_left_image\":{\"dimensions\":{\"width\":267,\"height\":180},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/aatGU1xvIZEnjb9J_top-nav-moving-at-ai-speed.png?auto=format,compress\",\"id\":\"aatGU1xvIZEnjb9J\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"banner_subtitle_icon\":{},\"banner_position\":\"Bottom\",\"banner_location\":\"Platform\",\"banner_subtitle\":[{\"type\":\"paragraph\",\"text\":\"Move at AI speed. Stay in control.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_body\":[{\"type\":\"paragraph\",\"text\":\"See how to release, experiment, observe \u0026 control AI.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link_text\":[{\"type\":\"paragraph\",\"text\":\"Watch demo\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link\":{\"link_type\":\"Web\",\"key\":\"35310a7f-4223-4c71-b058-f0f99ba04936\",\"url\":\"https://launchdarkly.com/product-demo/platform-overview/\"}},{\"banner_image\":{},\"banner_left_image\":{\"dimensions\":{\"width\":178,\"height\":120},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/abRT8lxvIZEnjqhK_developer-tab-free-trial.png?auto=format,compress\",\"id\":\"abRT8lxvIZEnjqhK\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"banner_subtitle_icon\":{},\"banner_position\":\"Bottom\",\"banner_location\":\"Developers\",\"banner_subtitle\":[{\"type\":\"paragraph\",\"text\":\"Take control of your AI at runtime.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_body\":[{\"type\":\"paragraph\",\"text\":\"Control releases, experiments, and AI behavior in prod.\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link_text\":[{\"type\":\"paragraph\",\"text\":\"Free trial\",\"spans\":[],\"direction\":\"ltr\"}],\"banner_link\":{\"link_type\":\"Web\",\"key\":\"4a0a8a27-41ee-4993-8274-dab982a68d7d\",\"url\":\"https://app.launchdarkly.com/signup\"}}],\"new_products_group\":[{\"icon\":{\"dimensions\":{\"width\":150,\"height\":150},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpUVqYofJOwHTu-_icon-main-nav--CodeControl.png?auto=format,compress\",\"id\":\"agpUVqYofJOwHTu-\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agTAhBIAACEAWwQ2\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"ship-confidently-with-automatic-recovery-and-continuous-improvement-built-in.\",\"first_publication_date\":\"2026-05-13T18:19:33+0000\",\"last_publication_date\":\"2026-05-19T05:42:39+0000\",\"uid\":\"platform.code-control\",\"url\":\"/platform.code-control/\",\"link_type\":\"Document\",\"key\":\"31f8582d-1543-426b-bfe9-b2e3aa405ab6\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"CodeControl\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"Ship confidently, with automated control built in.\",\"spans\":[],\"direction\":\"ltr\"}]},{\"icon\":{\"dimensions\":{\"width\":150,\"height\":150},\"alt\":null,\"copyright\":null,\"url\":\"https://images.prismic.io/launchdarkly-marketingsite/agpUVaYofJOwHTu9_icon-main-nav--AgentControl.png?auto=format,compress\",\"id\":\"agpUVaYofJOwHTu9\",\"edit\":{\"x\":0,\"y\":0,\"zoom\":1,\"background\":\"transparent\"}},\"link\":{\"id\":\"agSf7RIAAI1IWtRB\",\"type\":\"ai_refresh_pages\",\"tags\":[],\"lang\":\"en-us\",\"slug\":\"one-place-to-control-agent-behavior.\",\"first_publication_date\":\"2026-05-13T16:04:01+0000\",\"last_publication_date\":\"2026-06-01T17:57:35+0000\",\"uid\":\"platform.agent-control\",\"url\":\"/platform.agent-control/\",\"link_type\":\"Document\",\"key\":\"a6029978-2730-4f8c-aa21-9c15c2e2fbff\",\"isBroken\":false},\"link_text\":[{\"type\":\"paragraph\",\"text\":\"AgentControl\",\"spans\":[],\"direction\":\"ltr\"}],\"description\":[{\"type\":\"paragraph\",\"text\":\"One place to keep your agent behavior under control.\",\"spans\":[],\"direction\":\"ltr\"}]}]}},\"showBanner\":true,\"noNav\":\"$undefined\",\"addRiskMeterLogo\":false,\"hideLinks\":false,\"useSnowflakeHeader\":\"$undefined\",\"EoDNav\":\"$undefined\",\"useAiTheme\":\"$undefined\",\"isHomepage\":\"$undefined\",\"useRefreshDesign\":\"$undefined\",\"useWhiteLogo\":true}]\n"])</script><script>self.__next_f.push([1,"33:[\"$\",\"$L2f\",null,{\"supportItems\":[{\"title\":\"Support home\",\"url\":\"https://support.launchdarkly.com/\"},{\"title\":\"Professional Services\",\"url\":\"/services/\"},{\"title\":\"Documentation\",\"url\":\"https://launchdarkly.com/docs/home\"},{\"title\":\"Status\",\"url\":\"https://status.launchdarkly.com/\"}],\"whyUsItems\":[{\"title\":\"Economic Impact of LaunchDarkly\",\"url\":\"https://launchdarkly.com/guides/forrester-tei-report-2026/\"},{\"title\":\"How LaunchDarkly works\",\"url\":\"/how-it-works.platform/\"},{\"title\":\"Solutions\",\"url\":\"/solutions/\"},{\"title\":\"Trust \u0026 Security\",\"url\":\"/security/\"},{\"title\":\"Trust Center\",\"url\":\"https://trust.launchdarkly.com\"},{\"title\":\"LaunchDarkly vs. Competitors\",\"url\":\"https://launchdarkly.com/compare/\"},{\"title\":\"LaunchDarkly on AWS\",\"url\":\"https://launchdarkly.com/solutions/launchdarkly-aws/\"}],\"companyItems\":[{\"title\":\"About Us\",\"url\":\"/about-us/\"},{\"title\":\"Careers\",\"url\":\"/careers/\"},{\"title\":\"Media \u0026 Analysts\",\"url\":\"/press-and-analysts/\"},{\"title\":\"Partner Program\",\"url\":\"/partner-program/\"},{\"title\":\"Terms \u0026 Policies\",\"url\":\"https://launchdarkly.com/policies/subscription-terms/\"},{\"title\":\"Contact Us\",\"url\":\"/contact-us/\"},{\"title\":\"Community\",\"url\":\"https://launchdarkly.com/community/\"}],\"snsLinks\":[{\"url\":\"https://twitter.com/launchdarkly\",\"iconUrl\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/b4508c29-da0c-4e9b-bcae-205a95a6ba5d_logo--x-twitter.svg?auto=compress,format\",\"iconAlt\":\"twitter\"},{\"url\":\"https://www.youtube.com/@LaunchDarkly\",\"iconUrl\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/276be984-0bd0-44ed-9e32-44a21a0c4fac_icon-youtube.svg\",\"iconAlt\":\"YouTube\"},{\"url\":\"https://www.linkedin.com/company/launchdarkly/mycompany/\",\"iconUrl\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/8b512fb1-6ecc-4e7f-bfe2-368f1a29898b_icon-LinkedIn.svg\",\"iconAlt\":\"LinkedIn\"},{\"url\":\"https://discord.com/invite/launchdarklycommunity\",\"iconUrl\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/ZpaT7h5LeNNTxNRX_discord-logo-white.svg?auto=compress,format\",\"iconAlt\":\"Discord\"},{\"url\":\"https://www.instagram.com/launchdarkly/\",\"iconUrl\":\"https://launchdarkly-marketingsite.cdn.prismic.io/launchdarkly-marketingsite/8b8446e4-02c7-468e-bb32-79d0432dd1d0_instagram-icon-small.svg\",\"iconAlt\":\"Instagram\"}],\"useRefresShortFooter\":\"$undefined\",\"loadFooterNewsletter\":true,\"shortFooter\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"52:I[91711,[\"7503\",\"static/chunks/7503-b90474bdcb57e2a8.js\",\"7724\",\"static/chunks/7724-f653158a9ba1984f.js\",\"2151\",\"static/chunks/2151-1b788faaa737d8a8.js\",\"8149\",\"static/chunks/8149-7f3e93382769fd21.js\",\"4544\",\"static/chunks/4544-0392fd1bc10fce67.js\",\"8072\",\"static/chunks/8072-5f4bd0e6a2406823.js\",\"7950\",\"static/chunks/7950-199b90cf99360b48.js\",\"6486\",\"static/chunks/6486-65f1afba5f178bdd.js\",\"4089\",\"static/chunks/4089-4672fdbd787dddc6.js\",\"5265\",\"static/chunks/5265-7f81f179d2fa0221.js\",\"685\",\"static/chunks/685-dc88876e3a3ca418.js\",\"8941\",\"static/chunks/8941-6bf805c661ac7247.js\",\"739\",\"static/chunks/739-f05d34af20af1cd5.js\",\"4661\",\"static/chunks/4661-d6f876059d7e275f.js\",\"7550\",\"static/chunks/7550-010a17a69ff132e0.js\",\"9244\",\"static/chunks/9244-3b918f1b79c82aa2.js\",\"8687\",\"static/chunks/8687-88b6a1a725cd10c9.js\",\"8634\",\"static/chunks/8634-33081268eea6ca62.js\",\"4932\",\"static/chunks/app/blog/%5Buid%5D/page-1dbdf0f3b7bbcc12.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"35:[\"$\",\"$L52\",null,{\"mainBreadcrumb\":\"Blog\",\"mainBreadcrumbLink\":\"/blog\",\"subBreadcrumb\":\"Developer productivity\",\"subBreadcrumbLink\":\"/blog/category/developer-productivity\",\"title\":\"Testing in production to stay safe and sensible\",\"popularSearchTerms\":[{\"term\":[{\"type\":\"paragraph\",\"text\":\"Feature flags\",\"spans\":[]}]},{\"term\":[{\"type\":\"paragraph\",\"text\":\"Progressive delivery\",\"spans\":[]}]},{\"term\":[{\"type\":\"paragraph\",\"text\":\"feature management\",\"spans\":[]}]},{\"term\":[{\"type\":\"paragraph\",\"text\":\"Git branching strategies vs. trunk-based development\",\"spans\":[]}]},{\"term\":[{\"type\":\"paragraph\",\"text\":\"experimentation and A/B testing\",\"spans\":[]}]}]}]\n"])</script><script>self.__next_f.push([1,"47:null\n"])</script></body></html>