185 lines
234 KiB
HTML
185 lines
234 KiB
HTML
<!DOCTYPE html><html lang="en" dir="ltr"><head><script data-pre-hydration-monitor="true">(()=>{try{if(typeof MutationObserver>"u")return;const r=20,f=120,s={injectedElements:[],removedElements:[],attributesChanged:[]},c=t=>t?t.length>f?`${t.slice(0,f)}...`:t:"",N=["cdn.shopify.com","shopify.com","shopifycloud"],b=t=>t?N.some(e=>t.includes(e)):!1,m=t=>{const e=t.nodeName;if(!e||e==="#text"||e==="#comment")return null;const n=t.id?`#${t.id}`:"";let o="";if(t.className&&typeof t.className=="string"){const p=t.className.trim().split(/\s+/).slice(0,2).join(".");p&&(o=`.${p}`)}const u=t.getAttribute?.("src"),l=t.getAttribute?.("href"),g=t.getAttribute?.("type"),i=[];u?i.push(`src=${c(u)}`):l&&i.push(`href=${c(l)}`),g&&i.push(`type=${g}`);const E=i.length>0?`[${i.join(",")}]`:"",A=u||l||"";return{desc:[e,n,o,E].filter(Boolean).join(""),internal:b(A)}},d=t=>{const{target:e}=t,n=e.nodeName||"";return e.id?`${n}#${e.id}`:n},y=t=>{for(const e of t.addedNodes){const n=m(e);!n||n.internal||s.injectedElements.length<r&&s.injectedElements.push(`${n.desc} -> ${d(t)}`)}},$=t=>{for(const e of t.removedNodes){const n=m(e);!n||n.internal||s.removedElements.length<r&&s.removedElements.push(`${n.desc} <- ${d(t)}`)}},v=t=>{const e=d(t),n=t.target.getAttribute?.(t.attributeName)||"",o=`${e}.${t.attributeName}=${c(n)}`;s.attributesChanged.length<r&&s.attributesChanged.push(o)},h=new MutationObserver(t=>{for(const e of t){const n=e.type==="childList",o=e.type==="attributes";if(n){y(e),$(e);continue}o&&v(e)}}),a=()=>{h.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0})};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",a):a(),window.__preHydrationData=s,window.__stopPreHydrationMonitor=()=>{h.disconnect(),document.removeEventListener("DOMContentLoaded",a),delete window.__preHydrationData,delete window.__stopPreHydrationMonitor}}catch{}})();
|
||
</script><title>Capacity Planning at Scale - Shopify</title><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta http-equiv="Accept-CH" content="ECT, Save-Data, Device-Memory, Downlink"/><meta name="description" content="We cover our approaches to capacity planning, and how we rolled it out across the org and to dozens of teams. We’ll also share how we validated our capacity plans with scalability tests to make sure they work."/><meta property="fb:pages" content="20409006880"/><meta property="fb:app_id" content="847460188612391"/><meta property="og:type" content="website"/><meta property="og:site_name" content="Shopify"/><meta property="og:title" content="Capacity Planning at Scale - Shopify"/><meta property="og:description" content="We cover our approaches to capacity planning, and how we rolled it out across the org and to dozens of teams. We’ll also share how we validated our capacity plans with scalability tests to make sure they work."/><meta property="og:image" content="https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264"/><meta name="twitter:image" content="https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264"/><meta property="og:url" content="https://shopify.engineering/capacity-planning-shopify"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="Shopify"/><meta name="twitter:account_id" content="17136315"/><meta name="twitter:title" content="Capacity Planning at Scale - Shopify"/><meta name="twitter:description" content="We cover our approaches to capacity planning, and how we rolled it out across the org and to dozens of teams. We’ll also share how we validated our capacity plans with scalability tests to make sure they work."/><link href="https://cdn.shopify.com" rel="preconnect"/><link href="https://cdn.shopify.com" rel="preconnect" crossorigin="anonymous"/><link href="https://gtm.shopify.com" rel="preconnect"/><link href="https://www.googletagmanager.com" rel="preconnect"/><link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.shopify.com/b/shopify-brochure2-assets/b2ba26f35a9189c443bbbd74242e6b0e.woff2"/><link rel="stylesheet" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/blog-QDhcGZJl.css"/><link rel="alternate" type="application/atom+xml" title="Shopify Engineering" href="/blog.atom"/><script data-async-css-loader="true">(function(){function n(e){if(!e||e.media==="all")return;function t(){e.media="all"}e.sheet?t():e.addEventListener("load",t,{once:!0})}document.querySelectorAll("link[data-async-css]").forEach(n),typeof MutationObserver<"u"&&new MutationObserver(function(e){e.forEach(function(t){t.addedNodes.forEach(function(a){a.nodeType===1&&a.tagName==="LINK"&&a.hasAttribute("data-async-css")&&n(a)})})}).observe(document.head,{childList:!0,subtree:!0})})();
|
||
</script><link rel="icon" href="https://cdn.shopify.com/shopifycloud/web/assets/v1/favicon-default-6cbad9de243dbae3.ico" type="image/x-icon"/><link rel="apple-touch-icon" href="https://cdn.shopify.com/b/shopify-brochure2-assets/c97c60ca19c64a8b5378d9f9e971f7bd.png"/><link rel="apple-touch-icon" sizes="120x120" href="https://cdn.shopify.com/b/shopify-brochure2-assets/c97c60ca19c64a8b5378d9f9e971f7bd.png"/><link rel="apple-touch-icon" sizes="114x114" href="https://cdn.shopify.com/b/shopify-brochure2-assets/b13486e5693b246af63c66ab047a6b6b.png"/><link rel="apple-touch-icon" sizes="72x72" href="https://cdn.shopify.com/b/shopify-brochure2-assets/8734d76c98437c8ae8a628bbeed3750a.png"/><link rel="apple-touch-icon" sizes="57x57" href="https://cdn.shopify.com/b/shopify-brochure2-assets/193f18e4855704ef1716dc0cd750c1ee.png"/><link rel="canonical" href="https://shopify.engineering/capacity-planning-shopify"/><link href="https://shopify.engineering/capacity-planning-shopify" hrefLang="x-default" rel="alternate"/><link href="https://shopify.engineering/capacity-planning-shopify" hrefLang="en-US" rel="alternate"/><link href="https://shopify.engineering/capacity-planning-shopify" hrefLang="en" rel="alternate"/><meta name="ssr" content="false" /></head><body class="overscroll-y-none"><script>window.__brochureDuxConfig={"eventHandlerEndpoint":"/.well-known/dux?v2&_pri=1"}</script><div class="absolute top-2 left-2 z-[100] pointer-events-none"><a href="#main" class="inline-block self-center overflow-hidden max-w-full px-button-px py-button-py ring-inset rounded-button text-button-size font-button-font font-button-weight tracking-button-tracking focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-state-focus focus-visible:outline border-2 text-button-dark-primary-text bg-button-dark-primary-bg border-button-dark-primary-border ring-button-dark-primary-border hover:text-button-dark-primary-text-hover hover:bg-button-dark-primary-bg-hover hover:border-button-dark-primary-border-hover hover:ring-button-dark-primary-border-hover focus:text-button-dark-primary-text-focus focus:bg-button-dark-primary-bg-focus focus:border-button-dark-primary-border-focus focus:ring-button-dark-primary-border-focus active:text-button-dark-primary-text-active active:bg-button-dark-primary-bg-active active:border-button-dark-primary-border-active active:ring-button-dark-primary-border-active disabled:text-button-dark-primary-text-disabled disabled:bg-button-dark-primary-bg-disabled disabled:border-button-dark-primary-border-disabled disabled:ring-button-dark-primary-border-disabled transition-transform duration-300 translate-y-[-200%] motion-reduce:transition-none focus:translate-y-0" data-component-name="button" data-mode="dark" target="">Skip to Content</a></div><div class="relative bg-engineering-dark-bg text-engineering-dark-text [&_.app-signup-links]:hidden"><div class="bg-enginneering-dark bg-top bg-auto bg-no-repeat"><header class="font-sans absolute h-full w-full pointer-events-none z-50 overflow-x-clip" data-component-name="global-nav" data-viewable-component="true" data-component-extra-variant="brochureV2-newNav-header" data-has-secondary-navigation="true"><div class="after:absolute after:top-0 after:left-0 after:will-change-opacity after:pointer-events-none after:h-full after:w-full after:z-10 after:transition-opacity after:duration-200 w-full z-50 [&:has(.level1-item:hover)]:after:opacity-100 [&:has(.level1-item:focus-within)]:after:opacity-100 text-white after:opacity-0 -top-global-header pointer-events-auto [&:has(.level1-item)]:after:delay-[350ms] [&:has(.level1-item:hover)]:after:delay-100 [&:has(.level1-item:focus-within)]:after:delay-100 before:absolute before:top-0 before:left-0 before:will-change-opacity before:pointer-events-none before:h-full before:w-full before:z-100 before:transition-opacity before:duration-200 before:opacity-0 before:translate-y-full [&:has(.level1-item:hover)]:before:opacity-100 [&:has(.level1-item:focus-within)]:before:opacity-100 [&:has(.level1-item)]:before:delay-[350ms] [&:has(.level1-item:hover)]:before:delay-100 [&:has(.level1-item:focus-within)]:before:delay-100 before:bg-[linear-gradient(180deg,#02090A_0px,transparent_40px)] sticky after:bg-[#02090A]"><div class="h-global-header px-margin xl:px-auto-xl flex items-center z-20 relative"><a href="/" data-component-name="logo-home" class="inline-block shrink-0 mr-12 lg:w-[125px] w-[98px]"><img src="https://cdn.shopify.com/b/shopify-brochure2-assets/d9340911ca8c679b148dd4a205ad2ffa.svg" alt="Shopify" class="h-9" data-component-name="shopify-logo"/></a><nav class="max-lg:hidden flex h-full grow" aria-label="Main" itemscope="" itemType="https://schema.org/SiteNavigationElement" data-click-outside="dismiss" data-component-name="desktop-main-navigation" data-viewable-component="true"><ul class="flex h-full group"><li class="text-base mr-8"><div class="relative flex h-full after:block after:h-[3px] after:w-full after:absolute after:bottom-0 after:scale-0 after:origin-left after:transition-transform after:duration-[350ms] after:ease-[bezier(0.66,0.66,0.34,1.00)] after:motion-reduce:transition-none hover:underline after:bg-white text-white"><button type="button" class="bg-transparent whitespace-nowrap" data-component-name="Solutions-toggle-open" aria-expanded="false" aria-haspopup="true"><span class="font-semi-medium mr-3">Solutions</span><div aria-hidden="true" class="relative inline-block h-[7px] w-3 cursor-pointer"><div class="inline-block rounded border-b-8 h-2 w-[2px] origin-center transition-all ease-[bezier(0.66, 0.66, 0.34, 1.00)] duration-[350ms] motion-reduce:transition-none border-white bg-white -translate-x-[3px] rotate-[135deg]"></div><div class="inline-block rounded border-b-8 h-2 w-[2px] origin-center transition-all ease-[bezier(0.66, 0.66, 0.34, 1.00)] duration-[350ms] motion-reduce:transition-none border-white bg-white -rotate-[135deg]"></div></div></button></div><div id="SolutionsDesktopMenu" class="absolute inset-x-0 top-global-header z-[21] transition-transform duration-[452ms] ease-[cubic-bezier(0.26,1.00,0.48,1.00)] motion-reduce:transition-none before:absolute before:inset-x-0 before:top-0 before:w-full before:h-full before:left-0 before:shadow-xl before:pointer-events-none before:z-10 bg-black text-white opacity-0 pointer-events-none -translate-y-[10px]"><div class="relative no-scrollbar overflow-y-auto overflow-x-clip max-h-[calc(100vh-72px)] z-20 pb-28"><div class="container grid grid-cols-4 sm:grid-cols-8 md:grid-cols-12 gap-x-gutter gap-y-2xl"><div class="col-span-3 col-start-1 pt-8 text-white -translate-y-[30px]" data-background="transparent_dark"><div class="flex items-center border-shade-30 mb-6 border-b pb-4 text-lg border-shade-70"><span aria-hidden="true" class="-ml-2 lg:ml-0 mr-3 md:mr-3 inline-block h-10 w-10"><svg width="40" height="40" fill="none"><g clip-path="url(#white_circle_svg__a)"><path d="M19 21.5v-3h-2.5v1a1 1 0 0 1-1 1H14a1 1 0 0 1-1-1V14a1 1 0 0 1 1-1h1.5a1 1 0 0 1 1 1v1h6.75s4.25 0 4.25 4.5c0 0-2.25-1-5-1v3m-3.5 0h3.5m-3.5 0v6m3.5-6v6M39.25 20c0 10.631-8.619 19.25-19.25 19.25S.75 30.631.75 20 9.369.75 20 .75 39.25 9.369 39.25 20Z" stroke="url(#start_svg__b)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></g></svg></span><span id="sub-nav-item-start" class="text-t7 inline-block text-white">Start</span></div><ul class="pb-2" aria-labelledby="sub-nav-item-start"><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/start" aria-label="External source: Start your business . Build your brand"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Start your business<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Build your brand</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/website/builder" aria-label="External source: Create your website . Online store editor"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Create your website<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Online store editor</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://themes.shopify.com/" aria-label="External source: Customize your store . Store themes"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Customize your store<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Store themes</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://apps.shopify.com/" aria-label="External source: Find business apps . Shopify app store"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Find business apps<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Shopify app store</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/domains" aria-label="External source: Own your site domain . Domains & hosting"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Own your site domain<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Domains & hosting</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/tools" aria-label="External source: Explore free business tools . Tools to run your business"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Explore free business tools<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Tools to run your business</div></a></li></ul></div><div class="col-span-3 col-start-4 pt-8 text-white -translate-y-[30px]" data-background="transparent_dark"><div class="flex items-center border-shade-30 mb-6 border-b pb-4 text-lg border-shade-70"><span aria-hidden="true" class="-ml-2 lg:ml-0 mr-3 md:mr-3 inline-block h-10 w-10"><svg width="40" height="40" fill="none"><g clip-path="url(#white_circle_svg__a)"><path d="M12.75 21.5v4c0 .966 2.35 1.75 5.25 1.75s5.25-.784 5.25-1.75v-4m4-7c0 .966-2.35 1.75-5.25 1.75s-5.25-.784-5.25-1.75m10.5 0c0-.966-2.35-1.75-5.25-1.75s-5.25.784-5.25 1.75m10.5 0v4.25c0 .46-.533.88-1.405 1.192M16.75 14.5V17m6.5 4.25c0 .966-2.35 1.75-5.25 1.75s-5.25-.784-5.25-1.75S15.1 19.5 18 19.5s5.25.784 5.25 1.75Zm16-1.25c0 10.631-8.619 19.25-19.25 19.25S.75 30.631.75 20 9.369.75 20 .75 39.25 9.369 39.25 20Z" stroke="url(#sell_svg__a)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></g></svg></span><span id="sub-nav-item-sell" class="text-t7 inline-block text-white">Sell</span></div><ul class="pb-2" aria-labelledby="sub-nav-item-sell"><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/sell" aria-label="External source: Sell your products . Sell online or in person"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Sell your products<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Sell online or in person</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/checkout" aria-label="External source: Check out customers . World-class checkout"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Check out customers<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">World-class checkout</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/online" aria-label="External source: Sell online . Grow your business online"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Sell online<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Grow your business online</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/channels" aria-label="External source: Sell across channels . Reach millions of shoppers and boost sales"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Sell across channels<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Reach millions of shoppers and boost sales</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/international" aria-label="External source: Sell globally . International sales"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Sell globally<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">International sales</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/plus/solutions/b2b-ecommerce" aria-label="External source: Sell wholesale & direct . Business-to-business (B2B)"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Sell wholesale & direct<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Business-to-business (B2B)</div></a></li></ul></div><div class="col-span-3 col-start-7 pt-8 text-white -translate-y-[30px]" data-background="transparent_dark"><div class="flex items-center border-shade-30 mb-6 border-b pb-4 text-lg border-shade-70"><span aria-hidden="true" class="-ml-2 lg:ml-0 mr-3 md:mr-3 inline-block h-10 w-10"><svg width="40" height="40" fill="none"><g clip-path="url(#white_circle_svg__a)"><path d="m12.75 19.25 5.5-5.5m1 2.5v-3.5h-3.5m-2 14.5h.5a1 1 0 0 0 1-1v-2.5a1 1 0 0 0-1-1h-.5a1 1 0 0 0-1 1v2.5a1 1 0 0 0 1 1Zm6 0h.5a1 1 0 0 0 1-1v-5.5a1 1 0 0 0-1-1h-.5a1 1 0 0 0-1 1v5.5a1 1 0 0 0 1 1Zm6 0h.5a1 1 0 0 0 1-1v-12.5a1 1 0 0 0-1-1h-.5a1 1 0 0 0-1 1v12.5a1 1 0 0 0 1 1ZM39.25 20c0 10.631-8.619 19.25-19.25 19.25S.75 30.631.75 20 9.369.75 20 .75 39.25 9.369 39.25 20Z" stroke="url(#market_svg__a)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></g></svg></span><span id="sub-nav-item-market" class="text-t7 inline-block text-white">Market</span></div><ul class="pb-2" aria-labelledby="sub-nav-item-market"><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/market" aria-label="External source: Market your business . Reach & retain customers"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Market your business<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Reach & retain customers</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/facebook-instagram" aria-label="External source: Market across social . Social media integrations"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Market across social<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Social media integrations</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/inbox" aria-label="External source: Chat with customers . Shopify Inbox"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Chat with customers<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Shopify Inbox</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/email-marketing" aria-label="External source: Nurture customers . Shopify Messaging"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Nurture customers<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Shopify Messaging</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/segmentation" aria-label="External source: Know your audience . Gain customer insights"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Know your audience<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Gain customer insights</div></a></li></ul></div><div class="col-span-3 col-start-10 pt-8 text-white -translate-y-[30px]" data-background="transparent_dark"><div class="flex items-center border-shade-30 mb-6 border-b pb-4 text-lg border-shade-70"><span aria-hidden="true" class="-ml-2 lg:ml-0 mr-3 md:mr-3 inline-block h-10 w-10"><svg width="40" height="40" fill="none"><g clip-path="url(#white_circle_svg__a)"><path d="M12.75 15.75c0 1.243.75 2.5 2.25 2.5s2.5-1.257 2.5-2.5c0 1.243 1 2.5 2.5 2.5s2.5-1.257 2.5-2.5c0 1.243 1 2.5 2.5 2.5s2.25-1.257 2.25-2.5m-12.5 11.5h10.5a2 2 0 0 0 2-2v-9.067a2 2 0 0 0-.179-.827l-.538-1.184A2 2 0 0 0 24.713 13h-9.425a2 2 0 0 0-1.82 1.172l-.538 1.184a2 2 0 0 0-.18.827v9.067a2 2 0 0 0 2 2Zm3-3.5a2 2 0 0 1 2-2h.5a2 2 0 0 1 2 2v3.5h-4.5v-3.5ZM39.25 20c0 10.631-8.619 19.25-19.25 19.25S.75 30.631.75 20 9.369.75 20 .75 39.25 9.369 39.25 20Z" stroke="url(#manage_svg__a)" stroke-width="1.5" stroke-linecap="round"></path></g></svg></span><span id="sub-nav-item-manage" class="text-t7 inline-block text-white">Manage</span></div><ul class="pb-2" aria-labelledby="sub-nav-item-manage"><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/manage" aria-label="External source: Manage your business . Track sales, orders & analytics"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Manage your business<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Track sales, orders & analytics</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/analytics" aria-label="External source: Measure your performance . Analytics and Reporting"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Measure your performance<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Analytics and Reporting</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/orders" aria-label="External source: Manage your stock & orders . Inventory & order management"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Manage your stock & orders<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Inventory & order management</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/flow" aria-label="External source: Automate your business . Shopify Flow"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Automate your business<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Shopify Flow</div></a></li></ul></div></div></div><div class="absolute bottom-0 inset-x-0 overflow-hidden z-20"><div class="container grid grid-cols-4 sm:grid-cols-8 md:grid-cols-12 gap-x-gutter gap-y-2xl"><div class="col-span-12 col-start-1 scheme-white:bg-shade-10 scheme-transparent-light:bg-shade-10 scheme-black:bg-shade-90 scheme-transparent-dark:bg-shade-90 relative after:absolute after:left-full after:top-[-1px] after:w-[100vw] after:h-[calc(100%+1px)] scheme-white:after:bg-shade-10 scheme-transparent-light:after:bg-shade-10 scheme-black:after:bg-shade-90 scheme-transparent-dark:after:bg-shade-90 scheme-black:text-white scheme-transparent-dark:text-white -ml-[var(--margin)] -mt-8 md:mt-0 pl-[var(--margin)] pt-6 before:content-[''] before:absolute before:right-full before:top-[-1px] before:w-[100vw] before:h-[calc(100%+1px)] scheme-white:before:bg-shade-10 scheme-transparent-light:before:bg-shade-10 scheme-black:before:bg-shade-90 scheme-transparent-dark:before:bg-shade-90 border-t scheme-white:border-shade-20 scheme-transparent-light:border-shade-20 scheme-black:border-shade-70 scheme-transparent-dark:border-shade-70 before:border-t scheme-white:before:border-shade-20 scheme-transparent-light:before:border-shade-20 scheme-black:before:border-shade-70 scheme-transparent-dark:before:border-shade-70 after:border-t scheme-white:after:border-shade-20 scheme-transparent-light:after:border-shade-20 scheme-black:after:border-shade-70 scheme-transparent-dark:after:border-shade-70 text-black -translate-y-[30px]" data-background="transparent_dark"><ul class="grid grid-cols-12 gap-x-gutter gap-y-0 pb-0"><li class="flex mb-6 pr-4 border-r border-shade-30 last:border-0 col-span-3"><a class="group inline-block w-full text-white hover:text-white" href="https://shopify.dev" aria-label="External source: Shopify Developers . Build with Shopify's powerful APIs"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Shopify Developers<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Build with Shopify's powerful APIs</div></a></li><li class="flex mb-6 pr-4 border-r border-shade-30 last:border-0 col-span-3"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/plus" aria-label="External source: Plus . A commerce solution for growing digital brands"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Plus<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">A commerce solution for growing digital brands</div></a></li><li class="flex mb-6 pr-4 border-r border-shade-30 last:border-0 col-span-3"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/products" aria-label="External source: All Products . Explore all Shopify products & features"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">All Products<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Explore all Shopify products & features</div></a></li></ul></div></div></div></div></li><li class="text-base mr-8"><div class="flex h-full items-center"><a class="flex items-center hover:underline text-white hover:text-white" href="https://www.shopify.com/pricing" aria-label="External source: Pricing">Pricing</a></div></li><li class="text-base mr-8"><div class="relative flex h-full after:block after:h-[3px] after:w-full after:absolute after:bottom-0 after:scale-0 after:origin-left after:transition-transform after:duration-[350ms] after:ease-[bezier(0.66,0.66,0.34,1.00)] after:motion-reduce:transition-none hover:underline after:bg-white text-white"><button type="button" class="bg-transparent whitespace-nowrap" data-component-name="Resources-toggle-open" aria-expanded="false" aria-haspopup="true"><span class="font-semi-medium mr-3">Resources</span><div aria-hidden="true" class="relative inline-block h-[7px] w-3 cursor-pointer"><div class="inline-block rounded border-b-8 h-2 w-[2px] origin-center transition-all ease-[bezier(0.66, 0.66, 0.34, 1.00)] duration-[350ms] motion-reduce:transition-none border-white bg-white -translate-x-[3px] rotate-[135deg]"></div><div class="inline-block rounded border-b-8 h-2 w-[2px] origin-center transition-all ease-[bezier(0.66, 0.66, 0.34, 1.00)] duration-[350ms] motion-reduce:transition-none border-white bg-white -rotate-[135deg]"></div></div></button></div><div id="ResourcesDesktopMenu" class="absolute inset-x-0 top-global-header z-[21] transition-transform duration-[452ms] ease-[cubic-bezier(0.26,1.00,0.48,1.00)] motion-reduce:transition-none before:absolute before:inset-x-0 before:top-0 before:w-full before:h-full before:left-0 before:shadow-xl before:pointer-events-none before:z-10 bg-black text-white opacity-0 pointer-events-none -translate-y-[10px]"><div class="relative no-scrollbar overflow-y-auto overflow-x-clip max-h-[calc(100vh-72px)] z-20"><div class="container grid grid-cols-4 sm:grid-cols-8 md:grid-cols-12 gap-x-gutter gap-y-2xl"><div class="col-span-3 col-start-1 pt-8 text-white -translate-y-[30px]" data-background="transparent_dark"><div class="flex items-center border-shade-30 mb-6 border-b pb-4 text-lg border-shade-70"><span aria-hidden="true" class="-ml-2 lg:ml-0 mr-3 md:mr-3 inline-block h-10 w-10"><svg width="40" height="40" fill="none"><g clip-path="url(#help-and-support_svg__a)"><circle cx="20" cy="20" r="19.25" stroke="currentColor" stroke-width="1.5"></circle><path d="M20 20v6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path><path d="M20 16.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" fill="currentColor"></path></g></svg></span><span id="sub-nav-item-help-and-support" class="text-t7 inline-block text-white">Help and support</span></div><ul class="pb-2" aria-labelledby="sub-nav-item-help-and-support"><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://help.shopify.com/en/" aria-label="External source: Help and support . Get 24/7 support"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Help and support<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Get 24/7 support</div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopifyacademy.com" aria-label="External source: Business courses . Learn from proven experts"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Business courses<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Learn from proven experts</div></a></li></ul></div><div class="col-span-6 col-start-4 pt-8 text-white -translate-y-[30px]" data-background="transparent_dark"><div class="flex items-center border-shade-30 mb-6 border-b pb-4 text-lg border-shade-70"><span aria-hidden="true" class="-ml-2 lg:ml-0 mr-3 md:mr-3 inline-block h-10 w-10"><svg width="40" height="40" fill="none"><g clip-path="url(#white_circle_svg__a)" stroke="currentColor" stroke-width="1.5"><circle cx="20" cy="20" r="19.25"></circle><path d="m22.023 15.04 3 3M12.75 27.25l4.25-1 9.95-9.95a1 1 0 0 0 0-1.413l-1.837-1.836a1 1 0 0 0-1.414 0L13.75 23l-1 4.25Z" stroke-linecap="round" stroke-linejoin="round"></path></g></svg></span><span id="sub-nav-item-popular-topics" class="text-t7 inline-block text-white">Popular topics</span></div><ul class="pb-2 columns-2" aria-labelledby="sub-nav-item-popular-topics"><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/blog/what-is-shopify" aria-label="External source: What is Shopify? . How our commerce platform works"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">What is Shopify?<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">How our commerce platform works</div></a></li></ul></div><div class="col-span-3 col-start-10 pt-8 scheme-white:bg-shade-10 scheme-transparent-light:bg-shade-10 scheme-black:bg-shade-90 scheme-transparent-dark:bg-shade-90 pl-10 relative after:absolute after:left-full after:top-[-1px] after:w-[100vw] after:h-[calc(100%+1px)] scheme-white:after:bg-shade-10 scheme-transparent-light:after:bg-shade-10 scheme-black:after:bg-shade-90 scheme-transparent-dark:after:bg-shade-90 scheme-black:text-white scheme-transparent-dark:text-white border-l scheme-white:border-shade-20 scheme-transparent-light:border-shade-20 scheme-black:border-shade-70 scheme-transparent-dark:border-shade-70 text-black -translate-y-[30px]" data-background="transparent_dark"><div class="flex items-center border-shade-30 mb-6 border-b pb-4 text-lg border-shade-70"><span aria-hidden="true" class="-ml-2 lg:ml-0 mr-3 md:mr-3 inline-block h-10 w-10"><svg width="40" height="40" fill="none"><g clip-path="url(#white_circle_svg__a)" stroke="currentColor" stroke-width="1.5"><circle cx="20" cy="20" r="19.25"></circle><path d="M16.75 16.75v-2a2 2 0 0 1 2-2h2.5a2 2 0 0 1 2 2v2m-2 4v1.5a1 1 0 0 1-1 1h-.5a1 1 0 0 1-1-1v-1.5m2.5 0a1 1 0 0 0-1-1h-.5a1 1 0 0 0-1 1m2.5 0h6m-8.5 0h-6m2 6.5h10.5a2 2 0 0 0 2-2v-6.5a2 2 0 0 0-2-2h-10.5a2 2 0 0 0-2 2v6.5a2 2 0 0 0 2 2Z"></path></g></svg></span><span id="sub-nav-item-essential-tools" class="text-t7 inline-block text-white">Essential tools</span></div><ul class="pb-2" aria-labelledby="sub-nav-item-essential-tools"><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/tools/business-name-generator" aria-label="External source: Business name generator ."><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Business name generator <span class="sr-only">.</span></span></div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/tools/logo-maker" aria-label="External source: Logo maker ."><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Logo maker<span class="sr-only">.</span></span></div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/stock-photos" aria-label="External source: Stock photography ."><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Stock photography<span class="sr-only">.</span></span></div></a></li><li class="flex mb-6 pr-4"><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/tools/qr-code-generator" aria-label="External source: QR code generator ."><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">QR code generator<span class="sr-only">.</span></span></div></a></li></ul></div></div></div></div></li><li class="text-base mr-8"><div class="relative flex h-full after:block after:h-[3px] after:w-full after:absolute after:bottom-0 after:scale-0 after:origin-left after:transition-transform after:duration-[350ms] after:ease-[bezier(0.66,0.66,0.34,1.00)] after:motion-reduce:transition-none hover:underline after:bg-white text-white"><button type="button" class="bg-transparent whitespace-nowrap" data-component-name="What’s new-toggle-open" aria-expanded="false" aria-haspopup="true"><span class="font-semi-medium mr-3">What’s new</span><div aria-hidden="true" class="relative inline-block h-[7px] w-3 cursor-pointer"><div class="inline-block rounded border-b-8 h-2 w-[2px] origin-center transition-all ease-[bezier(0.66, 0.66, 0.34, 1.00)] duration-[350ms] motion-reduce:transition-none border-white bg-white -translate-x-[3px] rotate-[135deg]"></div><div class="inline-block rounded border-b-8 h-2 w-[2px] origin-center transition-all ease-[bezier(0.66, 0.66, 0.34, 1.00)] duration-[350ms] motion-reduce:transition-none border-white bg-white -rotate-[135deg]"></div></div></button></div><div id="What’s newDesktopMenu" class="absolute inset-x-0 top-global-header z-[21] transition-transform duration-[452ms] ease-[cubic-bezier(0.26,1.00,0.48,1.00)] motion-reduce:transition-none before:absolute before:inset-x-0 before:top-0 before:w-full before:h-full before:left-0 before:shadow-xl before:pointer-events-none before:z-10 bg-black text-white opacity-0 pointer-events-none -translate-y-[10px]"><div class="relative no-scrollbar overflow-y-auto overflow-x-clip max-h-[calc(100vh-72px)] z-20"><div class="container grid grid-cols-4 sm:grid-cols-8 md:grid-cols-12 gap-x-gutter gap-y-2xl"><div class="col-span-12 col-start-1 pt-8 text-white -translate-y-[30px]" data-background="transparent_dark"><ul class="grid grid-cols-12 gap-x-gutter gap-y-0 pb-0"><li class="flex mb-6 pr-4 border-r border-shade-30 last:border-0 col-span-3"><span aria-hidden="true" class="-ml-2 lg:ml-0 mr-3 md:mr-3 inline-block h-10 w-10"><svg width="41" height="42" viewBox="0 0 41 42" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_213_1921)"><path d="M39.5 21C39.5 31.6315 30.8815 40.25 20.25 40.25C9.61852 40.25 1 31.6315 1 21C1 10.3685 9.61852 1.75 20.25 1.75C30.8815 1.75 39.5 10.3685 39.5 21Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><rect x="13" y="14" width="15" height="14" rx="2" stroke="currentColor" stroke-width="1.5"></rect><path d="M25 24L19 24" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path><path d="M25 21L19 21" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path><path d="M25 18L19 18" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path><path d="M17 18L16 18" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path><path d="M17 21L16 21" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path><path d="M17 24L16 24" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></g><defs><clipPath id="clip0_213_1921"><rect width="40.5" height="40.5" fill="white" transform="translate(0 0.75)"></rect></clipPath></defs></svg></span><a class="group inline-block w-full text-white hover:text-white" href="https://changelog.shopify.com" aria-label="External source: Changelog . Your source for recent updates"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Changelog<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">Your source for recent updates</div></a></li><li class="flex mb-6 pr-4 border-r border-shade-30 last:border-0 col-span-3"><span aria-hidden="true" class="-ml-2 lg:ml-0 mr-3 md:mr-3 inline-block h-10 w-10"><svg width="42" height="42" viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M40.25 21C40.25 31.6315 31.6315 40.25 21 40.25C10.3685 40.25 1.75 31.6315 1.75 21C1.75 10.3685 10.3685 1.75 21 1.75C31.6315 1.75 40.25 10.3685 40.25 21Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M17.341 24.6079L18.8363 26.9574" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path><path d="M26.9609 14.7523C28.2811 15.4085 29.324 16.6069 29.7356 18.1429C30.1472 19.679 29.8432 21.2382 29.028 22.4667" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path><path d="M26.9769 20.7052C27.2556 20.1447 27.3388 19.4842 27.164 18.832C26.9893 18.1799 26.587 17.6495 26.0654 17.3034" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path><path d="M14.5357 20.5604C14.4233 20.1409 14.5945 19.6968 14.9595 19.4613L21.4187 15.2941C21.9885 14.9265 22.7512 15.2206 22.9267 15.8756L24.9726 23.5109C25.1481 24.1659 24.6346 24.802 23.9574 24.7685L16.2799 24.3892C15.8461 24.3678 15.4758 24.0688 15.3633 23.6493L14.5357 20.5604Z" stroke="currentColor" stroke-width="1.5"></path><path d="M12.0335 21.5081L12.7226 24.0796" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg></span><a class="group inline-block w-full text-white hover:text-white" href="https://www.shopify.com/news" aria-label="External source: Newsroom . All company news and press releases"><div class="text-base font-semi-medium"><span class="inline-block arrow-animation">Newsroom<span class="sr-only">.</span></span></div><div class="text-sm text-shade-30 group-hover:text-white">All company news and press releases</div></a></li></ul></div></div></div></div></li></ul></nav><div class="ml-auto transition-opacity duration-200 opacity-100 delay-100"><ul class="flex items-center lg:hidden mr-[-15px]"><li><button class="flex h-12 w-12 cursor-pointer select-none flex-col items-center justify-center gap-1" aria-label="Menu" aria-expanded="false" aria-haspopup="true" type="button" data-component-name="navigation-toggle-open"><div class="h-0.5 w-[1.125rem] transition-all ease-out-in duration-500 motion-reduce:transition-none bg-white"></div><div class="h-0.5 w-[1.125rem] transition-all ease-out-in duration-500 motion-reduce:transition-none bg-white"></div><div class="h-0.5 w-[1.125rem] transition-all ease-out-in duration-500 motion-reduce:transition-none bg-white"></div></button></li></ul></div></div></div><div class="top-0 w-full z-20 before:absolute before:top-0 before:left-0 before:pointer-events-none before:w-full before:h-global-header-with-border before:z-20 after:absolute after:top-0 after:left-0 after:will-change-opacity after:pointer-events-none after:h-full after:w-full after:z-10 after:transition-opacity after:duration-200 text-white before:border-y before:border-white/20 after:opacity-0 pointer-events-auto before:opacity-0 sticky after:bg-[#02090A]"><div class="h-global-header container flex items-center relative z-20"><div data-component-name="secondary-navigation" class="flex items-center gap-x-8 w-full h-14 sm:h-global-header text-white"><a href="/" data-component-name="logo-home" class="inline-block shrink-0 absolute left-0 top-1/2 -translate-y-1/2 transform-opacity will-change-opacity duration-200 z-20 w-9 opacity-0 pointer-events-none"><img src="https://cdn.shopify.com/b/shopify-brochure2-assets/cac815e4ee0f383f7b4b5302b5a7a29a.svg" alt="Shopify" class="h-9" data-component-name="shopify-logo"/></a><nav aria-label="Secondary" class="hidden lg:block h-full transition-transform will-change-transform duration-200 translate-x-0" data-click-outside="dismiss"><ul class="flex items-center gap-x-8 h-full"><li class="relative flex flex-col items-center h-full border-white/30"><a href="/" class="font-bold flex items-center h-full hover:underline outline-4 outline-state-focus focus-visible:outline">Engineering Blog</a></li><li class="relative flex flex-col items-center h-full after:absolute after:w-full after:h-[3px] after:bottom-0 hover:underline after:hidden after:bg-white"><a href="/topics/ai-machine-learning" class="flex items-center h-full outline-state-focus outline-4 focus-visible:outline" data-secondary-nav-tier="1">AI & Machine Learning</a></li><li class="relative flex flex-col items-center h-full after:absolute after:w-full after:h-[3px] after:bottom-0 hover:underline after:hidden after:bg-white"><a href="/topics/mobile" class="flex items-center h-full outline-state-focus outline-4 focus-visible:outline" data-secondary-nav-tier="1">Mobile</a></li><li class="relative flex flex-col items-center h-full after:absolute after:w-full after:h-[3px] after:bottom-0 hover:underline after:hidden after:bg-white"><a href="/topics/infrastructure" class="flex items-center h-full outline-state-focus outline-4 focus-visible:outline" data-secondary-nav-tier="1">Infrastructure</a></li><li class="relative flex flex-col items-center h-full after:absolute after:w-full after:h-[3px] after:bottom-0 hover:underline after:hidden after:bg-white"><a href="/topics/culture" class="flex items-center h-full outline-state-focus outline-4 focus-visible:outline" data-secondary-nav-tier="1">Culture</a></li><li class="relative flex flex-col items-center h-full after:absolute after:w-full after:h-[3px] after:bottom-0 hover:underline after:hidden after:bg-white"><a href="/latest" class="flex items-center h-full outline-state-focus outline-4 focus-visible:outline" data-secondary-nav-tier="1">Latest</a></li><li class="relative flex flex-col items-center h-full after:absolute after:w-full after:h-[3px] after:bottom-0 hover:underline after:hidden after:bg-white"><button type="button" aria-expanded="false" aria-haspopup="true" class="h-full outline-state-focus outline-4 focus-visible:outline" data-secondary-nav-tier="1"><span class="flex items-center">More topics<svg fill="none" viewBox="0 0 20 20" aria-hidden="true" icon="chevron" height="64" width="64" class="rotate-180 shrink-0 w-5 h-7 ml-2"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m4 13 6-6 6 6"></path></svg></span></button><div id="id_More topics_5" class="absolute top-[80px] duration-500 left-0 rounded-lg transition-all box-content opacity-0 -translate-y-6 pointer-events-none w-[256px] bg-black text-white shadow-dark"><ul class="p-4 w-[224px] box-content"><li class="py-3 px-4 rounded-lg"><a href="/topics/security" class="hover:underline outline-state-focus outline-4 focus-visible:outline" data-secondary-nav-tier="2">Security</a></li><li class="py-3 px-4 rounded-lg"><a href="/topics/developer-tooling" class="hover:underline outline-state-focus outline-4 focus-visible:outline" data-secondary-nav-tier="2">Developer Tooling</a></li><li class="py-3 px-4 rounded-lg"><a href="/topics/data-science-engineering" class="hover:underline outline-state-focus outline-4 focus-visible:outline" data-secondary-nav-tier="2">Data Science Engineering</a></li></ul></div></li></ul></nav><div class="hidden lg:block ml-auto"><button type="button" class="hidden lg:flex flex-row items-center text-base cursor-pointer blog-navbar-navigation" aria-label="Search" aria-expanded="false">Search<span style="width:16px;height:16px;display:inline-block"></span></button><div class="mb-6 lg:mb-0 lg:absolute lg:bottom-0 lg:left-0 w-full z-50 lg:hidden bg-transparent lg:before:bg-engineering-dark-bg lg:before:bg-top lg:before:bg-no-repeat lg:before:h-full lg:before:absolute lg:before:top-0 lg:before:left-0 lg:before:w-[200vw] lg:before:-translate-x-1/2"><div class="lg:container lg:h-[71px] flex items-center"><div class="flex flex-row items-center text-base relative w-full border-b border-[#ccc]"><form method="get" action="/capacity-planning-shopify" class="flex lg:block w-full -mt-4 lg:mt-0" novalidate="" data-component-extra-search-value="" role="search" aria-label="Search" data-discover="true"><input class="outline-0 text-base relative z-20 bg-transparent w-full lg:placeholder:text-transparent py-2 text-white placeholder-white" type="text" name="header-search" autoComplete="off" placeholder="Search" aria-label="Search input" aria-describedby="search-instructions" value=""/><button type="submit" class="lg:hidden p-6 -mr-6" aria-label="Submit search"><span style="width:16px;height:16px;display:inline-block"></span></button></form><div class="hidden lg:flex absolute z-10 top-1/2 left-0 -translate-y-1/2 flex-row items-center text-base text-white" id="search-instructions" aria-hidden="true">Type something you're looking for<span style="width:16px;height:16px;display:inline-block"></span></div><button type="button" class="hidden lg:block p-2 cursor-pointer ml-auto" aria-label="Close search"><span style="width:20px;height:20px;display:inline-block"></span></button></div></div></div></div><div class="pl-8 app-signup-links transform-opacity duration-200 relative before:h-[22px] before:bg-shade-30 before:w-[1px] before:absolute before:left-0 before:top-[1/2] before:translate-[-1/2] opacity-0 lg:hidden"><a href="/login?ui_locales=en" class="whitespace-nowrap">Log in</a><div data-component-name="button-group" data-mode="dark"><div class="flex gap-y-sm flex-wrap gap-x-2 justify-start"><a href="https://admin.shopify.com/signup?locale=en&language=en&signup_page=https%3A%2F%2Fshopify.engineering%2Fcapacity-planning-shopify&signup_types%5B%5D=paid_trial_experience" class="inline-block self-center overflow-hidden max-w-full px-button-px py-button-py ring-inset rounded-button text-button-size font-button-font font-button-weight tracking-button-tracking transition-all duration-150 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-state-focus focus-visible:outline border-2 text-button-dark-primary-text bg-button-dark-primary-bg border-button-dark-primary-border ring-button-dark-primary-border hover:text-button-dark-primary-text-hover hover:bg-button-dark-primary-bg-hover hover:border-button-dark-primary-border-hover hover:ring-button-dark-primary-border-hover focus:text-button-dark-primary-text-focus focus:bg-button-dark-primary-bg-focus focus:border-button-dark-primary-border-focus focus:ring-button-dark-primary-border-focus active:text-button-dark-primary-text-active active:bg-button-dark-primary-bg-active active:border-button-dark-primary-border-active active:ring-button-dark-primary-border-active disabled:text-button-dark-primary-text-disabled disabled:bg-button-dark-primary-bg-disabled disabled:border-button-dark-primary-border-disabled disabled:ring-button-dark-primary-border-disabled" data-component-name="button" data-mode="dark" target="">Start for free</a></div></div></div></div></div></div></header><svg class="sr-only" aria-hidden="true"><defs><linearGradient id="start_svg__b" x1="4" y1="2.5" x2="37.5" y2="36" gradientUnits="userSpaceOnUse"><stop stop-color="#00E392"></stop><stop offset="1" stop-color="#00B4CD"></stop></linearGradient><linearGradient id="manage_svg__a" x1="1" y1="1" x2="39" y2="39" gradientUnits="userSpaceOnUse"><stop stop-color="#1CD9D9"></stop><stop offset="1" stop-color="#70D50E"></stop></linearGradient><linearGradient id="market_svg__a" x1="1" y1="1" x2="39" y2="39" gradientUnits="userSpaceOnUse"><stop stop-color="#EA4EF2"></stop><stop offset="1" stop-color="#29C9FF"></stop></linearGradient><linearGradient id="sell_svg__a" x1="1" y1="1" x2="39" y2="39" gradientUnits="userSpaceOnUse"><stop stop-color="#33EDE2"></stop><stop offset="1" stop-color="#6754FF"></stop></linearGradient><clipPath id="white_circle_svg__a"><path fill="#fff" d="M0 0h40v40H0z"></path></clipPath></defs></svg><main role="main" id="main" tabindex="-1"><div class="fixed top-0 left-0 h-[6px] z-50 bg-engineering-highlight" style="width:null%"></div><section class="grid grid-cols-full text-section-light-text featured-blogs gap-y-0 pb-0 pt-36 bg-transparent" data-section-name="" data-component-name="capacity-planning-shopify" data-viewable-component="true" data-mode="light"><article id="article" itemscope="" itemType="https://schema.org/Article" class="featured-blogs__section"><meta itemProp="mainEntityOfPage" content="//capacity-planning-shopify"/><meta itemProp="dateModified" content="2020-12-03T18:00:01.000Z"/><meta itemProp="datePublished" content="2020-12-03T00:00:00.000Z"/><div class="relative"><div class="py-10 tablet:text-center desktop:pt-16 desktop:pb-16" data-mode="light"><div class="container desktop:w-9/12 desktop:mx-auto"><div class="uppercase font-sans text-[12px] leading-[14px] tracking-[0.01em] font-semibold tablet-xl:font-sans tablet-xl:text-[11px] tablet-xl:leading-[13px] tablet:tracking-[0.5px] tablet:font-bold pb-2 text-engineering-dark-text"><a href="/" class="no-underline topic-link hover:text-inherit">blog</a><span class="richtext px-2.5 text-xs">|</span><a href="/topics/infrastructure" class="no-underline topic-link hover:text-inherit">Infrastructure</a></div><h1 class="richtext font-medium tracking-[-0.02em] text-[28px] leading-9 tablet-xl:text-[40px] tablet-xl:leading-[48px] text-engineering-dark-text" itemProp="headline">Capacity Planning at Scale</h1><p class="richtext font-normal tracking-[-0.02em] text-[18px] leading-[26px] tablet-xl:text-[20px] tablet-xl:leading-7 desktop:text-[22px] desktop:leading-8 mt-4 desktop:mt-4 text-engineering-dark-text">We cover our approaches to capacity planning, and how we rolled it out across the org and to dozens of teams. We’ll also share how we validated our capacity plans with scalability tests to make sure they work.</p><div class="lg:hidden mt-4 tablet-xl:mt-12"><div class="gap-x-1 flex flex-wrap font-bold sm:justify-center !text-lg text-engineering-dark-text"></div><div class="text-body-sm font-normal text-engineering-dark-accent">Published on<!-- --> <time>Dec 3, 2020</time></div></div></div></div><div class="tablet:container desktop:w-9/12 desktop:mx-auto overflow-hidden flex justify-center"><img class="" src="https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264&originalWidth=1848&originalHeight=782" alt="A line graph showing Shopify's global traffic from BFCM 2019 to BFCM 2020" loading="eager" decoding="async" width="1848" height="782" srcSet="https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264&originalWidth=1848&originalHeight=782&width=200 200w, https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264&originalWidth=1848&originalHeight=782&width=400 400w, https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264&originalWidth=1848&originalHeight=782&width=600 600w, https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264&originalWidth=1848&originalHeight=782&width=800 800w, https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264&originalWidth=1848&originalHeight=782&width=1000 1000w, https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264&originalWidth=1848&originalHeight=782&width=1200 1200w, https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264&originalWidth=1848&originalHeight=782&width=1400 1400w, https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264&originalWidth=1848&originalHeight=782&width=1600 1600w, https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264&originalWidth=1848&originalHeight=782&width=1800 1800w"/></div></div><div class="container grid-cols-4 sm:grid-cols-8 md:grid-cols-12 block tablet-xl:grid gap-y-0 gap-x-12"><div class="col-span-4 xs:col-span-12 md:col-span-4 lg:col-span-3 col-start-1 nav-drawer md:pb-20 pt-10 desktop:pt-16" data-component-name="blog-left-sidebar"><nav class="md:top-[calc(var(--header-height)*2)] md:max-h-[calc(100vh-var(--header-height))] md:overflow-auto md:sticky md:pb-6 pr-2 text-engineering-dark-text"><div class="hidden md:block bg-engineering-dark-accent text-engineering-light-text"><div class="p-6"><p class="richtext text-2xl font-sans leading-6 desktop:leading-7 color-black tracking-[-0.02em]">Engineering at Shopify</p><p class="richtext font-sans desktop:leading-7 color-black tracking-[-0.02em] text-2xl mb-9 font-bold">We’re hiring</p><a href="https://www.shopify.com/careers/disciplines/engineering-data" class="flex justify-between align-middle font-sans leading-6 tracking-[-0.0175rem] !no-underline border-b border-black group" target="_blank" rel="noopener noreferrer"><span>See open roles</span><span class="flex justify-center items-center w-6 h-6 ml-4 my-auto [&_svg]:w-6 reduced-motion:group-hover:translate-x-0 transition-all duration-500 will-change-transform group-hover:translate-x-full group-hover:opacity-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.00025 15.9998C7.74425 15.9998 7.48825 15.9018 7.29325 15.7068C6.90225 15.3158 6.90225 14.6838 7.29325 14.2928L11.5862 9.99976L7.29325 5.70676C6.90225 5.31576 6.90225 4.68376 7.29325 4.29276C7.68425 3.90176 8.31625 3.90176 8.70725 4.29276L13.7073 9.29276C14.0982 9.68376 14.0982 10.3158 13.7073 10.7068L8.70725 15.7068C8.51225 15.9018 8.25625 15.9998 8.00025 15.9998Z" fill="black"></path></svg></span></a></div></div></nav></div><div class="col-span-4 xs:col-span-12 md:col-span-8 lg:col-span-6 col-start-1"><div id="article-content" class="text-body-base md:pt-10 desktop:pt-16 [&_h2]:text-t4 [&_h2]:mt-12 [&_h2]:mb-6 [&_h2]:font-medium [&_.heading--2]:text-t5 [&_.heading--2]:text-black [&_.heading--2]:font-sans [&_.heading--2]:mb-6 [&_.heading--2]:font-medium [&_h3]:text-t5 [&_h3]:mt-12 [&_h3]:mb-4 [&_h4]:text-t6 [&_h4]:mt-12 [&_h4]:mb-4 [&_h5]:text-t7 [&_p]:mb-6 [&_hr]:mb-6 [&_a]:font-medium [&_a]:underline [&_a:hover]:no-underline [&_sup_a]:no-underline [&_sup_a:hover]:underline [&_.marketing-button]:text-white [&_.marketing-button]:no-underline [&_a>img]:mt-3 [&_a>img]:mb-8 [&_a>img]:h-[revert-layer] [&_img]:my-12 [&_a>img]:inline-block [&_figure>img]:mb-0 [&_figure]:mb-12 [&_img]:inline-block [&_ul]:list-disc [&_ul]:space-y-3 [&_ul]:pl-6 [&_ul]:mb-6 [&_ul_li]:pl-4 [&_ol]:list-decimal [&_ol]:space-y-3 [&_ol]:pl-6 [&_ol]:mb-6 [&_ol_li]:pl-4 [&_ol_li::marker]:font-bold [&_iframe]:max-w-full [&_figcaption]:mb-12 [&_figcaption]:text-center [&_figcaption]:text-xs [&_figcaption]:sm:text-sm [&_figcaption]:mt-1 [&_strong]:font-medium [&_.heading--4]:font-sans [&_.heading--4]:text-2xl [&_.heading--4]:font-medium [&_.heading--4]:tracking-[-.02em] [&_iframe]:mt-3 [&_iframe]:mb-9 [&_.container]:m-0 [&_.container]:flex [&_.container]:gap-5 [&_.container]:flex-wrap [&_.green]:text-[green] [&_.red]:text-[red] [&_.pros]:bg-[#eafaea] [&_.pros]:rounded-[10px] [&_.pros]:p-5 [&_.pros_h3]:mt-2 [&_.cons]:bg-[#ffebe6] [&_.cons]:rounded-[10px] [&_.cons]:p-5 [&_.cons_h3]:mt-2 [&_.pros]:tablet:flex-[1_0_calc(50%-10px)] [&_.pros]:flex-[1_0_100%] [&_.cons]:tablet:flex-[1_0_calc(50%-10px)] [&_.cons]:flex-[1_0_100%] [&_.pros_.grid-container]:grid [&_.cons_.grid-container]:grid [&_.grid-container]:gap-[5px] [&_.grid-container]:grid-cols-[15px_auto] [&_.pros_.grid-container]:p-[5px] [&_.cons_.grid-container]:p-[5px] [&_.aspect-video_iframe]:mt-0 article-content [&_.truncated-text]:relative [&_.truncated-text]:max-h-[300px] [&_.truncated-text]:overflow-hidden [&_.truncated-text]:mb-6 [&_.truncated-text::before]:absolute [&_.truncated-text::before]:content-[""] [&_.truncated-text::before]:bottom-0 [&_.truncated-text::before]:w-full [&_.truncated-text::before]:h-[150px] [&_.truncated-text::before]:bg-gradient-to-t [&_.truncated-text::before]:from-white [&_.truncated-text::before]:from-50% [&_.truncated-text::before]:to-transparent [&_.truncated-text\_\_toggle]:absolute [&_.truncated-text\_\_toggle]:bottom-0 [&_.truncated-text\_\_toggle]:w-full [&_.truncated-text\_\_toggle]:text-center [&_.marketing-code]:bg-[#f0f1f2] [&_.marketing-code]:font-bold [&_.marketing-code]:p-1 [&_.marketing-code.marketing-code--block]:p-4 [&_.marketing-code--block]:block [&_.marketing-code--block]:max-w-full [&_.marketing-code--block]:overflow-x-scroll [&_.marketing-code--block]:mb-5 [&_.partners-signup]:mt-6 [&_.partners-signup]:mb-12 [&_.partners-signup]:bg-gray-200 [&_.partners-signup]:p-3 [&_.partners-signup]:md:p-6 [&_.table]:block [&_.table]:overflow-x-scroll [&_.table]:max-w-full text-engineering-dark-text [&_h2]:text-inherit [&_h3]:text-inherit [&_h4]:text-inherit [&_.heading--4]:text-inherit [&_a]:text-[#E7ECFB] [&_strong]:text-engineering-dark-text" itemProp="articleBody"><div class="hidden leadpage-container leadpage__image leadpage__content marketing-button hide--mobile block--bordered"></div><div><p style="text-align: right;"><strong>By Kathryn Tang and Kir Shatrov</strong></p>
|
||
<p>The fourth Thursday in November is Thanksgiving in the United States. The day after, Black Friday (coined in 1961), is the first day of the Christmas shopping season and since 2005 it’s the busiest shopping day of the year in North America. Cyber Monday is a more recent development. Getting its name in 2005, it refers to the Monday after the Thanksgiving weekend where retailers focus on sales offered online. At Shopify, we call the weekend including Black Friday and Cyber Monday <b>BFCM</b>.</p>
|
||
<p>From the engineering team’s point of view, every BFCM challenges the platform and all the things we’ve shipped throughout the year:</p>
|
||
<ul>
|
||
<li>Would our clusters handle two times the number of virtual machines? </li>
|
||
<li>Would we hit some sort of limitation on the new network design? </li>
|
||
<li>Would the new logging pipeline handle such an increase in traffic? </li>
|
||
<li>What’s going to be the next scalability bottleneck that we hit?</li>
|
||
</ul>
|
||
<p>The other challenge is planning the capacity. We need to understand the magnitude of traffic ahead of us, and how many resources like CPUs and storage we’ll need to handle BFCM sales. On top of that, we need to have enough room in case of something unexpected, and we need to perform a regional failover.</p>
|
||
<p>Since 2017, we’ve <a href="https://shopify.engineering/shopify-infrastructure-collaboration-with-google" target="_blank" title="Shopify’s Infrastructure Collaboration with Google" rel="nofollow noopener noreferrer">partnered with Google Cloud Platform</a> (GCP) as our main vendor for the cloud. Over these years, we’ve worked closely with their team on our capacity models, and prior to every BFCM that collaboration gets even closer.</p>
|
||
<p>In this post, we’ll cover our approaches to capacity planning, and how we rolled it out across the org and to dozens of teams. We’ll also share how we validated our capacity plans with scalability tests to make sure they work.</p>
|
||
<h1>Capacity Planning </h1>
|
||
<p>Our Google Cloud resource needs depend on how much traffic our merchants see during BFCM. We worked with our data scientists to forecast traffic levels and set those levels as a bar for our platform to scale to. Additionally, we looked into historical numbers, applied a safety margin, and projected how many buyers would check out or view online stores.</p>
|
||
<figure><img src="https://cdn.shopify.com/s/files/1/0779/4361/files/GCP-Projects-Capacity-planning.jpg?v=1607013216" alt="A list of GCP projects for resource planning. The list includes items like memcache, Kafka, MySQL, etc">
|
||
<figcaption>A list of GCP projects for resource planning.</figcaption>
|
||
</figure>
|
||
<p>We created a master resourcing plan for our Google Cloud implementation and estimated how things like CPUs and storage would scale to BFCM traffic levels. Owners for our top 10 or so resource areas were tasked to estimate what they needed for BFCM. These estimates were detailed breakdowns of the machine types, geographic locations, and quantities of resources like CPUs. We also added buffers to our overall estimates to allow flexibility to change our resourcing needs, move machines across projects, or failover traffic to different regions if we needed to. What also helps is that we partition each component into a separate GCP project, which makes it a lot easier to think of quotas per every project.</p>
|
||
<figure><img src="https://cdn.shopify.com/s/files/1/0779/4361/files/2020BFCM-Traffice-Scenarios.jpg?v=1607014152" alt="A line graph showing the BFCM traffic forecasts over time. 4 different scenarios are shown in blue, red, yellow and green. The black line shows existing traffic patterns" loading="lazy">
|
||
<figcaption>A line graph showing the BFCM traffic forecasts over time</figcaption>
|
||
</figure>
|
||
<p>2020 is an exceptionally difficult year to plan for. Normally, we’d look at BFCM trends from years prior and predict BFCM traffic with a fairly high level of confidence. This year, COVID-19 lockdowns drove a rapid shift to selling online this spring, and we didn't know what to expect. Would we see a massive increase in online traffic this BFCM, or a global economic depression where consumers stopped buying much at all? To manage heightened uncertainty, we forecasted multiple scenarios and their respective needs for our cloud deployment.</p>
|
||
<p>From an investment perspective, planning for the largest scale scenario means spending a lot of money very quickly to handle sales that might not happen. Alternatively, not deploying enough machines means having too little computing power and putting our merchant storefronts at risk of outages. It was absolutely vital to avoid anything that would put our merchants at risk of downtime. We decided to scale to our more aggressive growth scenarios to ensure our platform is stable regardless of what happens. We’re transparent with our partners, finance teams, and internal teams about how we thought through these scenarios which helps them make their own operating decisions.</p>
|
||
<h1>Scalability Testing</h1>
|
||
<p>A sheet with a capacity plan is just a starting point. Once we start scaling to projected numbers, there’s a high chance that we’ll hit limits throughout our tech stack that need resolving. In a complex system, there’s always a limit like:</p>
|
||
<ul>
|
||
<li>the number of VMs in a network</li>
|
||
<li>the number of packets that a busy Memcached server can accept </li>
|
||
<li>the number of MB/s your logging pipeline can handle.</li>
|
||
</ul>
|
||
<p>Historically, every BFCM brought us some scalability surprises, and what’s worse, we’d only notice them when fully scaled prior to BFCM. That left too little time to come up with mitigation plans.</p>
|
||
<p>Back in 2018, we decided that a “faux” BFCM in the middle of the year would increase our resilience as an organization and push us to find unknowns that we’d otherwise only discover during the real thing. As we started doing that, it allowed us to find problems at scale more often and created that mental muscle of preparing for critical events and finding unknowns. If you’re exercising and something feels hard, you train more and eventually your muscles get better. Shopify treats BFCM the same way.</p>
|
||
<p>We’ve started the practice of regular scale-up testing at Shopify, and of course we made sure to come up with fun names for each. We’ve had Mayday (2019), Spooky scale-up (2019), and Oktoberfest scale-up (2020). Another fun fact is that our Waterloo teams play a large part in running this testing, and the dates of our Oktoberfest matched the city of Kitchener-Waterloo’s Oktoberfest festivities (It’s the second-largest Oktoberfest in the world).</p>
|
||
<p>Oktoberfest scale-up’s goal was to simulate this year’s expected BFCM load based on the traffic forecasts from the data science team. And the fact that we run Shopify in cloud on Google Kubernetes Engine allowed us to grab extra compute capacity just for the window of the exercise, and only pay for those hours when we needed it.</p>
|
||
<p>Investment in our internal load testing tooling over the years is fundamental to our ability to run such <a href="https://shopify.engineering/performance-testing-shopify" target="_blank" title="Pummelling the Platform–Performance Testing Shopify" rel="nofollow noopener noreferrer">large scale, platform-wide load tests</a>. We’ve talked about <a href="https://shopify.engineering/announcing-go-lua" target="_blank" title="Announcing go-lua - Shopify Engineering" rel="nofollow noopener noreferrer">go-lua, an open source project that powers our load testing tool</a>. Thanks to embedded Lua, we feed it with a high-level set of steps for what we want to test: actions like browsing the storefront, adding a product to a card, proceeding to check out, and processing the transaction through a mock payment gateway.</p>
|
||
<p>Thanks to Oktoberfest scale-up, we identified and then fixed some bottlenecks that could have become an issue for the real BFCM. Doing the test in early October gave us time to address issues.</p>
|
||
<p>After addressing all the issues, we repeated the scale-up test to see how our mitigations helped. Seeing that going smoothly increased our confidence levels about the upcoming Black Friday and reduced stress levels for all teams.</p>
|
||
<p>We strive for a smooth BFCM and spend a lot of time preparing for it, from capacity planning, to setting the expectations for our vendors, to load testing, and failover simulations. Beyond delivering a smooth holiday season for our merchants, BFCM is time to reflect on the future. As Shopify continues to grow, BFCM traffic levels can become the normal everyday loads we see in the next year. Our job is to bring lessons from events like BFCM to make our systems even more automated, more dynamic, and more resilient. We relish this opportunity to think about where Shopify is going and to architect our platform to scale with it.</p>
|
||
<div class="marketing-block marketing-block--light marketing-block--padded my-12 border-l-2 pl-4 [&_h2]:!mt-0 [&_h2]:mb-6 [&_h2]:text-t5 [&_h3]:!mt-0 [&_h3]:mb-6 [&_h3]:text-t7 [&_h4]:!mt-0 [&_h4]:mb-6 [&_h4]:text-t8 [&_ul]:!mt-0 [&_ul]:mb-6 [&_ul:last-child]:mb-0 [&_ol]:!mt-0 [&_ol]:mb-6 [&_ol:last-child]:mb-0 [&_p]:!mt-0 [&_p]:mb-6 [&_p:last-child]:mb-0 text-engineering-dark-text [&_*]:!text-engineering-dark-text bg-transparent border-engineering-highlight">
|
||
<p><strong>Kir Shatrov</strong> is an Engineering Lead who’s been with Production Engineering at Shopify for the past five years, working on areas from CI/CD infrastructure to sharding and capacity planning.</p>
|
||
</div>
|
||
<div class="marketing-block marketing-block--light marketing-block--padded my-12 border-l-2 pl-4 [&_h2]:!mt-0 [&_h2]:mb-6 [&_h2]:text-t5 [&_h3]:!mt-0 [&_h3]:mb-6 [&_h3]:text-t7 [&_h4]:!mt-0 [&_h4]:mb-6 [&_h4]:text-t8 [&_ul]:!mt-0 [&_ul]:mb-6 [&_ul:last-child]:mb-0 [&_ol]:!mt-0 [&_ol]:mb-6 [&_ol:last-child]:mb-0 [&_p]:!mt-0 [&_p]:mb-6 [&_p:last-child]:mb-0 text-engineering-dark-text [&_*]:!text-engineering-dark-text bg-transparent border-engineering-highlight">
|
||
<p><strong>Kathryn Tang</strong> is an Engineering Program Manager who manages our Google Cloud relationship. She has been at Shopify for 4 years, working with a multitude of R&D and commercial teams to derive business insights and guide operating decisions to help us scale.</p>
|
||
</div>
|
||
<hr>
|
||
<p>We're planning to DOUBLE our engineering team in 2021 by hiring 2,021 new technical roles (see what we did there?). Our platform handled record-breaking sales over BFCM and commerce isn't slowing down. <a href="https://www.shopify.com/careers/2021" target="_blank" title="We’re planning to double our engineering team in 2021 by hiring 2,021 new technical roles">Help us scale & make commerce better for everyone</a>. </p></div></div><div class="border-t tablet-xl:border-[#d4d4d8] my-16 py-6 flex tablet-xl:flex-row justify-between flex-col"><div class="flex items-center tablet-xl:justify-start tablet-xl:flex-row justify-between flex-row-reverse"><div class="h-16 w-16 tablet-xl:mr-4 grow-0 shrink-0 bg-[#D9D9D9] rounded-full overflow-hidden flex justify-center items-center text-white text-xl font-extrabold"><div>KT</div></div><div class="self-center flex flex-col"><div class="gap-x-1 flex flex-wrap text-lg font-sans leading-[18px] font-bold mb-2 text-engineering-dark-text">by <span itemProp="author" itemscope="" itemType="https://schema.org/Person"><a href="/authors/kathryn-tang" class="no-underline" itemProp="url"><span itemProp="name">Kathryn Tang</span></a></span></div><div class="text-body-sm font-normal text-engineering-dark-accent">Published on<!-- --> <time>Dec 3, 2020</time></div></div></div><div class="xs:border-b tablet-xl:border-0 pb-4"><div class="font-bold text-xs font-sans uppercase mt-4 tablet-xl:mt-0 tablet-xl:text-right text-engineering-dark-accent">Share article</div><ul id=":Rlqkln5:" class="flex gap-4 mt-4" data-component-name="social"><li><a class="block h-9 w-9 hover:fill-shade-7 fill-[#E7ECFB]" aria-describedby="blog-social-icon-facebook-:Rlqkln5:" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fshopify.engineering%2Fcapacity-planning-shopify" rel="me nofollow noopener noreferrer" target="_blank" data-component-name="social-facebook" aria-label="External source: Facebook (Opens in a new window)"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="37" viewBox="0 0 36 37"><circle cx="18" cy="18.6143" r="18" fill="#E7ECFB"></circle><path fill-rule="evenodd" clip-rule="evenodd" d="M16.4664 25.3643V19.2063H14.2495V16.8064H16.4664V15.0366C16.4664 12.9826 17.8084 11.8643 19.7685 11.8643C20.7074 11.8643 21.5144 11.9296 21.7495 11.9588V14.1053L20.3901 14.1059C19.3241 14.1059 19.1177 14.5793 19.1177 15.2742V16.8064H21.66L21.329 19.2063H19.1177V25.3643H16.4664Z" fill="#120937"></path></svg><span id="blog-social-icon-facebook-:Rlqkln5:" class="sr-only">Facebook</span></a></li><li><a class="block h-9 w-9 hover:fill-shade-7 fill-[#E7ECFB]" aria-describedby="blog-social-icon-twitter-:Rlqkln5:" href="https://twitter.com/intent/tweet?text=Capacity+Planning+at+Scale&url=https%3A%2F%2Fshopify.engineering%2Fcapacity-planning-shopify&via=Shopify" rel="me nofollow noopener noreferrer" target="_blank" data-component-name="social-twitter" aria-label="External source: Twitter (Opens in a new window)"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="37" viewBox="0 0 36 37" fill="none"><circle cx="18" cy="18.6143" r="18" fill="#E7ECFB"></circle><path fill-rule="evenodd" clip-rule="evenodd" d="M23.3786 17.0672C23.3786 17.9589 23.2031 18.8473 22.851 19.7304C22.5 20.6135 22.0027 21.4212 21.3615 22.1535C20.7202 22.8858 19.8844 23.4781 18.8561 23.9326C17.8279 24.387 16.7074 24.6143 15.4946 24.6143C13.9657 24.6143 12.5505 24.219 11.25 23.4275C11.4784 23.4447 11.6977 23.4533 11.9081 23.4533C13.2097 23.4533 14.3606 23.0743 15.363 22.3172C14.7656 22.3172 14.2335 22.1449 13.7677 21.8003C13.302 21.4546 12.9814 21.013 12.8047 20.4746C12.9814 20.509 13.1659 20.5252 13.3594 20.5252C13.6575 20.5252 13.9219 20.5004 14.1502 20.4498C13.5349 20.3152 13.0376 20.0083 12.6596 19.5279C12.2827 19.0487 12.0937 18.4898 12.0937 17.8501V17.7995C12.0937 17.9007 12.2119 17.9804 12.4492 18.0396C12.6866 18.0978 12.9375 18.1279 13.2007 18.1279C12.7969 17.8749 12.4627 17.555 12.1984 17.1684C11.9351 16.7818 11.8035 16.3693 11.8035 15.931C11.8035 15.4604 11.9261 15.0146 12.1725 14.5935C12.8756 15.4184 13.7239 16.0743 14.7172 16.5621C15.7095 17.051 16.7692 17.3203 17.8942 17.3698C17.8414 17.1684 17.8144 16.966 17.8144 16.7646C17.8144 16.0409 18.0877 15.4184 18.6322 14.8972C19.1767 14.3749 19.8281 14.1143 20.583 14.1143C21.3919 14.1143 22.0691 14.3921 22.6136 14.9467C23.229 14.8293 23.8174 14.6193 24.3799 14.3156C24.1695 14.9392 23.7566 15.427 23.1412 15.7803C23.7037 15.7124 24.2392 15.5703 24.75 15.3506C24.363 15.889 23.8972 16.3521 23.3516 16.7387C23.3696 16.8572 23.3786 16.966 23.3786 17.0672Z" fill="#120937"></path></svg><span id="blog-social-icon-twitter-:Rlqkln5:" class="sr-only">Twitter</span></a></li><li><a class="block h-9 w-9 hover:fill-shade-7 fill-[#E7ECFB]" aria-describedby="blog-social-icon-linkedin-:Rlqkln5:" href="https://www.linkedin.com/shareArticle?mini=true&source=Shopify&title=Capacity+Planning+at+Scale&url=https%3A%2F%2Fshopify.engineering%2Fcapacity-planning-shopify" rel="me nofollow noopener noreferrer" target="_blank" data-component-name="social-linkedin" aria-label="External source: LinkedIn (Opens in a new window)"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="37" viewBox="0 0 36 37" fill="none"><circle cx="18" cy="18.6143" r="18" fill="#E7ECFB"></circle><path fill-rule="evenodd" clip-rule="evenodd" d="M13.4102 12.6143C14.1884 12.6143 14.8191 13.2463 14.8191 14.0236C14.8191 14.8018 14.1884 15.4334 13.4102 15.4334C12.6293 15.4334 11.9995 14.8018 11.9995 14.0236C11.9995 13.2463 12.6293 12.6143 13.4102 12.6143ZM16.1521 16.5032H18.4826V17.572H18.5163C18.8405 16.9568 19.6337 16.3083 20.8163 16.3083C23.2766 16.3083 23.7315 17.9281 23.7315 20.035V24.3258H21.3026V20.5218C21.3026 19.6147 21.2849 18.4476 20.039 18.4476C18.7736 18.4476 18.5805 19.4353 18.5805 20.4562V24.3258H16.1521V16.5032ZM12.1929 24.326H14.6268V16.5034H12.1929V24.326Z" fill="#120937"></path></svg><span id="blog-social-icon-linkedin-:Rlqkln5:" class="sr-only">LinkedIn</span></a></li></ul></div></div></div><div class="col-span-4 xs:col-span-12 lg:col-span-3 col-start-1 hidden lg:block relative" data-component-name="blog-right-sidebar"><div class="tablet-xl:pt-10 desktop:pt-16 pb-6 absolute h-full max-h-full tot-0 left-0"><div class="h-full overflow-hidden" id="blog-side-banners-col"><div class="gap-x-1 flex flex-wrap font-bold text-lg !font-sans text-engineering-dark-text">by <span itemProp="author" itemscope="" itemType="https://schema.org/Person"><a href="/authors/kathryn-tang" class="no-underline" itemProp="url"><span itemProp="name">Kathryn Tang</span></a></span></div><div class="text-body-sm font-normal text-engineering-dark-accent">Published on<!-- --> <time>Dec 3, 2020</time></div><span class="text-body-sm font-normal text-engineering-dark-accent"> • <!-- -->6 minute read</span><div id="blog-side-banners"><div class="font-sans text-[#E7ECFB] mt-[640px]" data-priority="0"><p class="richtext text-base uppercase mb-6 font-medium"></p><span class="mb-4 pl-2 border-l border-[#CAD4D7] inline-block border-engineering-highlight"><span class="uppercase text-xs mb-2 block pt-2 font-bold [&_a]:no-underline [&_a]:hover:text-inherit"><a href="/topics/development" data-component-name="blog-popular-post-Development">Development</a></span><a href="/introducing-ruvy" data-component-name="blog-popular-post-introducing-ruvy"><span class="richtext text-base block hover:underline hover:underline-offset-4 font-normal text-engineering-dark-text">Introducing Ruvy</span></a></span><span class="mb-4 pl-2 border-l border-[#CAD4D7] inline-block border-engineering-highlight"><span class="uppercase text-xs mb-2 block pt-2 font-bold [&_a]:no-underline [&_a]:hover:text-inherit"><a href="/topics/developer-tooling" data-component-name="blog-popular-post-Developer Tooling">Developer Tooling</a></span><a href="/building-a-shopifyql-code-editor" data-component-name="blog-popular-post-building-a-shopifyql-code-editor"><span class="richtext text-base block hover:underline hover:underline-offset-4 font-normal text-engineering-dark-text">Building a ShopifyQL Code Editor</span></a></span></div><div class="font-sans text-[#E7ECFB] mt-[640px]" data-priority="0"><p class="richtext text-base uppercase mb-6 font-medium"></p><span class="mb-4 pl-2 border-l border-[#CAD4D7] inline-block border-engineering-highlight"><span class="uppercase text-xs mb-2 block pt-2 font-bold [&_a]:no-underline [&_a]:hover:text-inherit"><a href="/topics/apps" data-component-name="blog-popular-post-Apps">Apps</a></span><a href="/shopifys-platform-is-the-web-platform" data-component-name="blog-popular-post-shopifys-platform-is-the-web-platform"><span class="richtext text-base block hover:underline hover:underline-offset-4 font-normal text-engineering-dark-text">Shopify’s platform is the Web platform</span></a></span><span class="mb-4 pl-2 border-l border-[#CAD4D7] inline-block border-engineering-highlight"><span class="uppercase text-xs mb-2 block pt-2 font-bold [&_a]:no-underline [&_a]:hover:text-inherit"><a href="/topics/development" data-component-name="blog-popular-post-Development">Development</a></span><a href="/building-flex-comp" data-component-name="blog-popular-post-building-flex-comp"><span class="richtext text-base block hover:underline hover:underline-offset-4 font-normal text-engineering-dark-text">The Engineering Story Behind Flex Comp</span></a></span></div></div></div></div></div></div><div itemProp="publisher" itemscope="" itemType="https://schema.org/Organization"><meta itemProp="name" content="Shopify"/><div itemProp="logo" itemscope="" itemType="https://schema.org/ImageObject"><meta itemProp="url" content="https://cdn.shopify.com/assets/images/logos/shopify_logo_black.png"/><meta itemProp="width" content="210"/><meta itemProp="height" content="60"/></div></div></article><div class="py-10 tablet-xl:py-16 overflow-hidden lg:hidden tablet-xl:pt-0 pt-0 [&_h5]:uppercase text-engineering-dark-text font-sans font-normal [&_h4]:font-normal [&_.blogPost>div:first-child>a:not(:hover)]:text-engineering-highlight"><div class="container"><div class="flex justify-between items-center mb-9"><h5 class="richtext tracking-[-.02em] blog-section-header text-[26px] leading-[30px] tablet:text-[24px] tablet:leading-[32px] font-bold tablet:font-medium"></h5></div></div><div class="container max-lg:!mr-0"><div class="flex justify-start flex-nowrap max-w-full overflow-x-auto snap-x snap-mandatory gap-x-gutter pr-[var(--margin)] lg:flex-wrap lg:justify-center lg:overflow-hidden lg:gap-y-gutter lg:mb-gutter lg:mx-auto lg:py-4 lg:pr-0"><div class="popular-posts support-card shrink-0 snap-center w-[296px] lg:basis-1/4-gutter"><article class="article--index"><div class="blogPost pt-4"><div class="uppercase font-sans font-medium pb-2 text-[12px] leading-[20px] tracking-[0.02em] text-shade-100 hover:text-link-light-hover"><a href="/topics/development" class="no-underline text-engineering-dark-text font-sans font-normal hover:text-eyebrow-dark-text">Development</a></div><div class="tracking-[-.02em] pb-4 hover:underline text-base desktop:text-xl text-engineering-dark-text font-sans font-normal [&_h4]:font-normal"><a class="tracking-[-.02em] pb-4 hover:underline text-base desktop:text-xl text-engineering-dark-text font-sans font-normal [&_h4]:font-normal" href="/introducing-ruvy" rel="" target="_self">Introducing Ruvy</a></div><p class="richtext text-body-sm font-normal text-engineering-dark-author-text font-sans">2023-10-18</p></div></article></div><div class="popular-posts support-card shrink-0 snap-center w-[296px] lg:basis-1/4-gutter"><article class="article--index"><div class="blogPost pt-4"><div class="uppercase font-sans font-medium pb-2 text-[12px] leading-[20px] tracking-[0.02em] text-shade-100 hover:text-link-light-hover"><a href="/topics/developer-tooling" class="no-underline text-engineering-dark-text font-sans font-normal hover:text-eyebrow-dark-text">Developer Tooling</a></div><div class="tracking-[-.02em] pb-4 hover:underline text-base desktop:text-xl text-engineering-dark-text font-sans font-normal [&_h4]:font-normal"><a class="tracking-[-.02em] pb-4 hover:underline text-base desktop:text-xl text-engineering-dark-text font-sans font-normal [&_h4]:font-normal" href="/building-a-shopifyql-code-editor" rel="" target="_self">Building a ShopifyQL Code Editor</a></div><p class="richtext text-body-sm font-normal text-engineering-dark-author-text font-sans">2023-09-11</p></div></article></div><div class="popular-posts support-card shrink-0 snap-center w-[296px] lg:basis-1/4-gutter"><article class="article--index"><div class="blogPost pt-4"><div class="uppercase font-sans font-medium pb-2 text-[12px] leading-[20px] tracking-[0.02em] text-shade-100 hover:text-link-light-hover"><a href="/topics/apps" class="no-underline text-engineering-dark-text font-sans font-normal hover:text-eyebrow-dark-text">Apps</a></div><div class="tracking-[-.02em] pb-4 hover:underline text-base desktop:text-xl text-engineering-dark-text font-sans font-normal [&_h4]:font-normal"><a class="tracking-[-.02em] pb-4 hover:underline text-base desktop:text-xl text-engineering-dark-text font-sans font-normal [&_h4]:font-normal" href="/shopifys-platform-is-the-web-platform" rel="" target="_self">Shopify’s platform is the Web platform</a></div><p class="richtext text-body-sm font-normal text-engineering-dark-author-text font-sans">2023-07-26</p></div></article></div><div class="popular-posts support-card shrink-0 snap-center w-[296px] lg:basis-1/4-gutter"><article class="article--index"><div class="blogPost pt-4"><div class="uppercase font-sans font-medium pb-2 text-[12px] leading-[20px] tracking-[0.02em] text-shade-100 hover:text-link-light-hover"><a href="/topics/development" class="no-underline text-engineering-dark-text font-sans font-normal hover:text-eyebrow-dark-text">Development</a></div><div class="tracking-[-.02em] pb-4 hover:underline text-base desktop:text-xl text-engineering-dark-text font-sans font-normal [&_h4]:font-normal"><a class="tracking-[-.02em] pb-4 hover:underline text-base desktop:text-xl text-engineering-dark-text font-sans font-normal [&_h4]:font-normal" href="/building-flex-comp" rel="" target="_self">The Engineering Story Behind Flex Comp</a></div><p class="richtext text-body-sm font-normal text-engineering-dark-author-text font-sans">2022-10-05</p></div></article></div></div><div class="mobile-indicators mt-6 flex justify-center gap-x-2 lg:hidden"><div class="rounded-full box-content w-2 h-2 bg-black w-2 h-2 !bg-[#E7ECFB]"></div><div class="rounded-full box-content w-2 h-2 bg-[#d9d9d9] w-2 h-2 !bg-[#9AA7C8]"></div><div class="rounded-full box-content w-2 h-2 bg-[#d9d9d9] w-2 h-2 !bg-[#9AA7C8]"></div><div class="rounded-full box-content w-2 h-2 bg-[#d9d9d9] w-2 h-2 !bg-[#9AA7C8]"></div></div></div></div></section><div class="relative overflow-hidden bg-engineering-banner-bg py-10 tablet-xl:py-20 bg-[#61d095]" data-component-name="cta-footer-banner"><div class="container relative flex flex-col items-center text-center py-10 tablet-xl:py-16"><span class="richtext uppercase font-medium font-sans mb-2 text-[28px] tablet-xl:text-[42px] desktop:text-[48px] max-w-[800px] tablet-xl:mb-6 leading-[36px] tablet-xl:leading-[46px] desktop:leading-[56px] text-black">Work from anywhere <br/> with Shopify</span><p class="richtext max-w-[680px] text-body-base tablet-xl:text-body-lg mb-2 tablet-xl:mb-9 text-black">See our open roles and learn more about our digital by design culture.</p><div data-component-name="button-group" class="text-base relative z-20 w-[273px] h-14" data-mode="light"><div class="flex gap-y-sm flex-wrap gap-x-sm justify-center"><a href="https://www.shopify.com/careers/disciplines/engineering-data" class="inline-block self-center overflow-hidden max-w-full px-button-px py-button-py ring-inset rounded-button font-button-font font-button-weight tracking-button-tracking transition-all duration-150 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-state-focus focus-visible:outline md:px-button-lg-px md:py-button-lg-py text-button-lg-size border-2 text-button-light-primary-text bg-button-light-primary-bg border-button-light-primary-border ring-button-light-primary-border hover:text-button-light-primary-text-hover hover:bg-button-light-primary-bg-hover hover:border-button-light-primary-border-hover hover:ring-button-light-primary-border-hover focus:text-button-light-primary-text-focus focus:bg-button-light-primary-bg-focus focus:border-button-light-primary-border-focus focus:ring-button-light-primary-border-focus active:text-button-light-primary-text-active active:bg-button-light-primary-bg-active active:border-button-light-primary-border-active active:ring disabled:text-button-light-primary-text-disabled disabled:bg-button-light-primary-bg-disabled disabled:border-button-light-primary-border-disabled disabled:ring-button-light-primary-border-disabled w-[273px] sm:w-full" data-component-name="button" data-mode="light" target="_blank" rel="noopener noreferrer" aria-label="External source: See open roles (Opens in a new window)">See open roles</a></div></div></div></div></main><footer class="relative flex flex-col font-sans bg-black text-white"><div id="NewWindowExternalSite" class="hidden">Opens an external site in a new window</div><section class="grid-cols-full container flex flex-col gap-16 py-16 my-0 sm:justify-start sm:pb-16 md:flex-row md:flex-nowrap md:justify-between md:py-20 md:gap-20 xl:w-full bg-black text-white" data-section-name="footer" data-component-name="footer" data-viewable-component="true" data-mode="light"><div class="min-w-[100px]"><img src="https://cdn.shopify.com/b/shopify-brochure2-assets/88ee7022e2749387148cb4098cc4f9fb.svg" alt="Shopify" class="h-11" data-component-name="shopify-logo"/></div><div class="md:block md:justify-end"><div class="flex flex-col flex-wrap gap-12 gap-x-4 md:gap-20 md:gap-x-16 sm:grid sm:max-h-fit sm:grid-cols-3 lg:grid-cols-4 max-h-368 sm:max-h-300"><div class="w-[calc(50%-1rem)] sm:w-fit" data-component-name="shopify"><h3 class="text-base font-bold text-white">Shopify</h3><ul class="mt-4 md:mt-6"><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/about" data-component-name="about" aria-label="External source: About">About</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/careers" data-component-name="careers" aria-label="External source: Careers">Careers</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/investors" data-component-name="investors" aria-label="External source: Investors">Investors</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/news" data-component-name="press-and-media" aria-label="External source: Press and Media">Press and Media</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/partners" data-component-name="partners" aria-label="External source: Partners">Partners</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/affiliates" data-component-name="affiliates" aria-label="External source: Affiliates">Affiliates</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/legal" data-component-name="legal" aria-label="External source: Legal">Legal</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopifystatus.com/" data-component-name="service-status" aria-label="External source: Service status">Service status</a></li></ul></div><div class="w-[calc(50%-1rem)] sm:w-fit" data-component-name="support"><h3 class="text-base font-bold text-white">Support</h3><ul class="mt-4 md:mt-6"><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://help.shopify.com/en/questions" data-component-name="merchant-support" aria-label="External source: Merchant Support">Merchant Support</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://help.shopify.com/en/" data-component-name="shopify-help-center" aria-label="External source: Shopify Help Center">Shopify Help Center</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/partners/directory" data-component-name="hire-a-partner" aria-label="External source: Hire a Partner">Hire a Partner</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopifyacademy.com/?itcat=brochure&itterm=global-footer" data-component-name="shopify-academy" aria-label="External source: Shopify Academy">Shopify Academy</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://community.shopify.com/?utm_campaign=footer&utm_content=en&utm_medium=web&utm_source=shopify" data-component-name="shopify-community" aria-label="External source: Shopify Community">Shopify Community</a></li></ul></div><div class="w-[calc(50%-1rem)] sm:w-fit" data-component-name="developers"><h3 class="text-base font-bold text-white">Developers</h3><ul class="mt-4 md:mt-6"><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://shopify.dev" data-component-name="shopify-dev" aria-label="External source: Shopify.dev">Shopify.dev</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://shopify.dev/api" data-component-name="api-documentation" aria-label="External source: API Documentation">API Documentation</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://devdegree.ca" data-component-name="dev-degree" aria-label="External source: Dev Degree">Dev Degree</a></li></ul></div><div class="w-[calc(50%-1rem)] sm:w-fit" data-component-name="products"><h3 class="text-base font-bold text-white">Products</h3><ul class="mt-4 md:mt-6"><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://shop.app" data-component-name="shop" aria-label="External source: Shop">Shop</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/shop-pay" data-component-name="shop-pay" aria-label="External source: Shop Pay">Shop Pay</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/enterprise" data-component-name="shopify-for-enterprise" aria-label="External source: Shopify for Enterprise">Shopify for Enterprise</a></li></ul></div><div class="w-[calc(50%-1rem)] sm:w-fit" data-component-name="global-impact"><h3 class="text-base font-bold text-white">Global Impact</h3><ul class="mt-4 md:mt-6"><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/climate" data-component-name="sustainability" aria-label="External source: Sustainability">Sustainability</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://operationhope.org/initiatives/1-million-black-businesses/" data-component-name="build-black" aria-label="External source: Build Black">Build Black</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/accessibility" data-component-name="accessibility" aria-label="External source: Accessibility">Accessibility</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/plus/commerce-trends" data-component-name="research" aria-label="External source: Research">Research</a></li></ul></div><div class="w-[calc(50%-1rem)] sm:w-fit" data-component-name="solutions"><h3 class="text-base font-bold text-white">Solutions</h3><ul class="mt-4 md:mt-6"><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/online" data-component-name="online-store-builder" aria-label="External source: Online Store Builder">Online Store Builder</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/website/builder" data-component-name="website-builder" aria-label="External source: Website Builder">Website Builder</a></li><li><a class="mt-2 block py-3 text-base font-normal hover:underline md:py-0.5 text-[#E0E0E0] hover:text-white" href="https://www.shopify.com/tour/ecommerce-website" data-component-name="ecommerce-website" aria-label="External source: Ecommerce Website">Ecommerce Website</a></li></ul></div></div></div></section><section class="grid gap-y-2xl grid-cols-full text-section-light-text border-t my-0 py-0 container max-sm:mx-0 xl:w-full border-white/20 bg-inherit" data-section-name="footer" data-component-name="footer" data-viewable-component="true" data-mode="light"><div class="flex flex-col items-center justify-center gap-4 py-8 sm:items-start sm:gap-8 lg:flex-row lg:justify-between lg:gap-10 bg-black text-white"><div class="mt-1 flex w-full flex-col items-center justify-center sm:flex-row sm:items-start sm:justify-start sm:gap-8 lg:gap-14"><ul class="flex flex-col items-center flex-wrap sm:flex-row sm:items-start gap-x-8 md:gap-x-10" data-component-name="bottom-nav"><li class="mt-2 block py-3 sm:mt-0 text-[#E0E0E0] hover:text-white"><a class="hover:underline" href="https://www.shopify.com/legal/terms" data-component-name="terms-of-service" aria-label="External source: Terms of service">Terms of service</a></li><li class="mt-2 block py-3 sm:mt-0 text-[#E0E0E0] hover:text-white"><a class="hover:underline" href="https://www.shopify.com/legal/privacy" data-component-name="privacy-policy" aria-label="External source: Privacy policy">Privacy policy</a></li><li class="mt-2 block py-3 sm:mt-0 text-[#E0E0E0] hover:text-white"><a class="hover:underline" href="https://www.shopify.com/sitemap" data-component-name="sitemap" aria-label="External source: Sitemap">Sitemap</a></li><li class="mt-2 block py-3 sm:mt-0 text-[#E0E0E0] hover:text-white"><a class="hover:underline" href="https://privacy.shopify.com/en" data-component-name="your-privacy-choices" aria-label="External source: Your Privacy Choices"><span class="flex items-center gap-1.5">Your Privacy Choices<img src="https://cdn.shopify.com/b/shopify-brochure2-assets/8051dee1dd72e78a9528a16c062cff66.svg" alt="California Consumer Privacy Act (CCPA) Opt-Out Icon" class="h-3.5 w-7.5 shrink-0" width="30" height="14" loading="lazy"/></span></a></li></ul></div><ul class="flex gap-4 md:gap-6" data-component-name="social"><li><a class="block h-8 w-8 fill-white hover:fill-shade-30" href="" rel="me nofollow noopener noreferrer" target="_blank" data-component-name="social-facebook" aria-label="Facebook (Opens in a new window)"><svg viewBox="0 0 30 30"><path d="M15.6 30V19.4h5V15h-5v-3.1c0-1 .6-1.9 1.3-1.9h3.8V5.6h-3.8c-3.1 0-5.6 2.8-5.6 6.3V15H7.5v4.4h3.8v10.1C4.8 27.9 0 22 0 15 0 6.7 6.7 0 15 0s15 6.7 15 15c0 8.1-6.4 14.7-14.4 15z"></path></svg></a></li><li><a class="block h-8 w-8 fill-white hover:fill-shade-30" href="https://x.com/shopifyeng" rel="me nofollow noopener noreferrer" target="_blank" data-component-name="social-twitter" aria-label="External source: Twitter (Opens in a new window)"><svg viewBox="0 0 19 19"><path fill-rule="evenodd" clip-rule="evenodd" d="M19 9.5C19 14.7467 14.7467 19 9.5 19C4.25329 19 0 14.7467 0 9.5C0 4.25329 4.25329 0 9.5 0C14.7467 0 19 4.25329 19 9.5ZM8.18721 10.0675L3.64633 3.99603H7.14609L10.123 7.97639L13.8073 3.99603H14.8358L10.5825 8.59099L15.379 15.0039H11.8792L8.64689 10.6819L4.6462 15.0039H3.61771L8.18721 10.0675ZM6.76655 4.75353H5.15877L12.2586 14.2464H13.8663L6.76655 4.75353Z"></path></svg></a></li><li><a class="block h-8 w-8 fill-white hover:fill-shade-30" href="" rel="me nofollow noopener noreferrer" target="_blank" data-component-name="social-youtube" aria-label="YouTube (Opens in a new window)"><svg viewBox="0 0 30 30"><path d="M30 15c0 8.3-6.7 15-15 15S0 23.3 0 15 6.7 0 15 0s15 6.7 15 15zm-5.6 0c0-6.9 0-6.9-9.4-6.9s-9.4 0-9.4 6.9 0 6.9 9.4 6.9 9.4 0 9.4-6.9zm-11.9-3.7 6.3 3.8-6.3 3.8v-7.6z"></path></svg></a></li><li><a class="block h-8 w-8 fill-white hover:fill-shade-30" href="" rel="me nofollow noopener noreferrer" target="_blank" data-component-name="social-instagram" aria-label="Instagram (Opens in a new window)"><svg viewBox="0 0 18 18"><path clip-rule="evenodd" d="M9 0c5 0 9 4 9 9s-4 9-9 9-9-4-9-9 4-9 9-9zM6.7 3.5h4.7c1.8 0 3.2 1.4 3.2 3.1v4.7c0 1.7-1.4 3.1-3.2 3.1H6.7c-1.8 0-3.2-1.4-3.2-3.1V6.7c0-1.8 1.4-3.2 3.2-3.2zM9 6.2c1.6 0 2.9 1.3 2.9 2.9S10.6 12 9 12s-3-1.3-3-2.9 1.3-2.9 3-2.9zm0 1.2c.9 0 1.7.8 1.7 1.7 0 .9-.8 1.7-1.7 1.7-.9 0-1.7-.8-1.7-1.7 0-.9.7-1.7 1.7-1.7zm2.8-1.7c.3 0 .6.2.6.6 0 .3-.2.6-.6.6-.3 0-.6-.2-.6-.6 0-.4.3-.6.6-.6zm-4.6-1h3.7c1.4 0 2.5 1.1 2.5 2.5v3.7c0 1.4-1.1 2.5-2.5 2.5H7.2c-1.4 0-2.5-1.1-2.5-2.5V7.2c-.1-1.4 1.1-2.5 2.5-2.5z" fill-rule="evenodd"></path></svg></a></li><li><a class="block h-8 w-8 fill-white hover:fill-shade-30" href="" rel="me nofollow noopener noreferrer" target="_blank" data-component-name="social-tiktok" aria-label="TikTok (Opens in a new window)"><svg viewBox="0 0 30 30"><path fill-rule="evenodd" clip-rule="evenodd" d="M15 30C23.2843 30 30 23.2843 30 15C30 6.71573 23.2843 0 15 0C6.71573 0 0 6.71573 0 15C0 23.2843 6.71573 30 15 30ZM17.9679 11.937C19.1423 12.7643 20.551 13.2076 21.9952 13.2041V10.3838C21.2138 10.3841 20.4497 10.1579 19.7979 9.73365C19.3398 9.44298 18.9467 9.06336 18.6427 8.61802C18.3387 8.17268 18.1302 7.67098 18.0299 7.1436C17.9873 6.90737 17.9669 6.66779 17.9689 6.42789H15.0829V17.7069C15.0829 18.2146 14.92 18.7094 14.6173 19.1206C14.3146 19.5317 13.8877 19.8382 13.3975 19.9962C12.9073 20.1543 12.3789 20.1558 11.8878 20.0006C11.3966 19.8454 10.9679 19.5414 10.6627 19.1321C10.3576 18.7227 10.1916 18.2289 10.1886 17.7211C10.1856 17.2134 10.3456 16.7177 10.6458 16.3048C10.946 15.8919 11.3711 15.583 11.8604 15.4221C12.3496 15.2612 12.878 15.2566 13.37 15.409V12.5068C12.2944 12.3595 11.1987 12.539 10.2295 13.0213C9.26031 13.5037 8.46383 14.2658 7.94658 15.2058C7.42933 16.1458 7.21597 17.2188 7.33504 18.2814C7.4541 19.344 7.89992 20.3455 8.61286 21.1519C9.3258 21.9583 10.2719 22.5312 11.3246 22.794C12.3772 23.0568 13.4863 22.997 14.5035 22.6225C15.5207 22.2479 16.3975 21.5766 17.0166 20.6983C17.6357 19.82 17.9676 18.7766 17.9679 17.7075V11.937Z"></path></svg></a></li><li><a class="block h-8 w-8 fill-white hover:fill-shade-30" href="" rel="me nofollow noopener noreferrer" target="_blank" data-component-name="social-linkedin" aria-label="LinkedIn (Opens in a new window)"><svg viewBox="0 0 30 30"><path d="M30 15c0 8.3-6.7 15-15 15S0 23.3 0 15 6.7 0 15 0s15 6.7 15 15zM11.3 7.8c0-1.2-1-2.2-2.5-2.2s-2.5.9-2.5 2.2c0 1.2 1 2.2 2.5 2.2s2.5-1 2.5-2.2zm-.7 4.1H6.9v10.6h3.8V11.9zm13.8 5c0-3.4-1.7-5.6-4.4-5.6-1.5 0-2.6.9-3.1 2.3l-.1-1.6H13c0 .4.1 2.5.1 2.5v8.1h3.8V17c0-1.5.7-2.5 1.8-2.5s1.9.6 1.9 2.5v5.6h3.8v-5.7z"></path></svg></a></li><li><a class="block h-8 w-8 fill-white hover:fill-shade-30" href="" rel="me nofollow noopener noreferrer" target="_blank" data-component-name="social-pinterest" aria-label="Pinterest (Opens in a new window)"><svg viewBox="0 0 30 30"><path d="M15 30c-1.5 0-2.9-.2-4.3-.6.6-.9 1.2-2 1.5-3.2.2-.7 1-4.1 1-4.1.5 1 2 1.9 3.7 1.9 4.8 0 8.1-4.4 8.1-10.3 0-4.4-3.8-8.6-9.5-8.6-7.1-.1-10.6 5-10.6 9.3 0 2.6 1 4.9 3.1 5.7.3.1.7 0 .8-.4.1-.2.2-.9.3-1.2.1-.4 0-.5-.2-.8-.6-.7-1-1.6-1-3 0-3.8 2.8-7.2 7.4-7.2 4 0 6.2 2.5 6.2 5.8 0 4.3-1.9 8-4.8 8-1.6 0-2.7-1.3-2.4-2.9.5-1.9 1.3-4 1.3-5.3 0-1.2-.7-2.3-2-2.3-1.6 0-2.9 1.7-2.9 3.9 0 1.4.5 2.4.5 2.4S9.5 24 9.3 25.3c-.3 1.1-.4 2.4-.3 3.5-5.3-2.4-9-7.7-9-13.8C0 6.7 6.7 0 15 0s15 6.7 15 15-6.7 15-15 15z"></path></svg></a></li></ul></div></section></footer></div></div><link rel="modulepreload" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/entry.client-BaMUKgRA.js"/><link rel="modulepreload" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/chunk-62JRHF6Z-DVymXer8.js"/><link rel="modulepreload" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/jsx-runtime-BOIFapZd.js"/><link rel="modulepreload" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/react-dom-DSd4XqwN.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/documentInlineStylesheet-D3gcTLE2.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/enums-XZV-2aE9.js"/><link rel="modulepreload" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/root-BXC63CIn.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/utils-B-Fbl_HJ.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/EngineeringBlogFooter-D4iVF9GH.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/dist-DLh16i5j.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/twMerge-BngH92bT.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/Provider-fcGPcczW.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/I18N-nSui3-xL.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/getLogoSrc-CdTS7Pll.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/HeadingGroup-ClVI31eU.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/useDevWindowOverride-BP8cJUax.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/Pause-B9PjlT2S.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/Play-lu8gDnZZ.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/layout-D-bUpcmN.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/route-DayiFhhM.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/EngineeringPageLayout-BLnuzAa9.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/useIntlLocale-DMH2ftuJ.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/Close-DuJl3rCQ.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/AuthorImage-DjAsHjBW.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/ArticleCarousel-DfsjN5YP.js"/><link rel="modulepreload" fetchpriority="low" href="https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/useBlogPageTitle-BCs3QNtx.js"/><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"v8_passThroughRequests":false,"v8_trailingSlashAwareDataRequests":false,"unstable_previewServerPrerendering":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":true},"routeDiscovery":{"mode":"lazy","manifestPath":"/__manifest"},"ssr":true,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());</script><script type="module" async="">;
|
||
import * as route0 from "https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/root-BXC63CIn.js";
|
||
import * as route1 from "https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/layout-D-bUpcmN.js";
|
||
import * as route2 from "https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/route-DayiFhhM.js";
|
||
window.__reactRouterManifest = {
|
||
"entry": {
|
||
"module": "https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/entry.client-BaMUKgRA.js",
|
||
"imports": [
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/chunk-62JRHF6Z-DVymXer8.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/jsx-runtime-BOIFapZd.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/react-dom-DSd4XqwN.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/documentInlineStylesheet-D3gcTLE2.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/enums-XZV-2aE9.js"
|
||
],
|
||
"css": []
|
||
},
|
||
"routes": {
|
||
"root": {
|
||
"id": "root",
|
||
"path": "",
|
||
"hasAction": false,
|
||
"hasLoader": true,
|
||
"hasClientAction": false,
|
||
"hasClientLoader": false,
|
||
"hasClientMiddleware": false,
|
||
"hasDefaultExport": true,
|
||
"hasErrorBoundary": true,
|
||
"module": "https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/root-BXC63CIn.js",
|
||
"imports": [
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/chunk-62JRHF6Z-DVymXer8.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/jsx-runtime-BOIFapZd.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/react-dom-DSd4XqwN.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/documentInlineStylesheet-D3gcTLE2.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/enums-XZV-2aE9.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/utils-B-Fbl_HJ.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/EngineeringBlogFooter-D4iVF9GH.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/dist-DLh16i5j.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/twMerge-BngH92bT.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/Provider-fcGPcczW.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/I18N-nSui3-xL.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/getLogoSrc-CdTS7Pll.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/HeadingGroup-ClVI31eU.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/useDevWindowOverride-BP8cJUax.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/Pause-B9PjlT2S.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/Play-lu8gDnZZ.js"
|
||
],
|
||
"css": []
|
||
},
|
||
"~~layout": {
|
||
"id": "~~layout",
|
||
"parentId": "root",
|
||
"path": "",
|
||
"caseSensitive": true,
|
||
"hasAction": false,
|
||
"hasLoader": false,
|
||
"hasClientAction": false,
|
||
"hasClientLoader": false,
|
||
"hasClientMiddleware": false,
|
||
"hasDefaultExport": true,
|
||
"hasErrorBoundary": false,
|
||
"module": "https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/layout-D-bUpcmN.js",
|
||
"imports": [
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/chunk-62JRHF6Z-DVymXer8.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/jsx-runtime-BOIFapZd.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/Provider-fcGPcczW.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/enums-XZV-2aE9.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/I18N-nSui3-xL.js"
|
||
],
|
||
"css": []
|
||
},
|
||
"$article": {
|
||
"id": "$article",
|
||
"parentId": "~~layout",
|
||
"path": ":article",
|
||
"caseSensitive": true,
|
||
"hasAction": false,
|
||
"hasLoader": true,
|
||
"hasClientAction": false,
|
||
"hasClientLoader": false,
|
||
"hasClientMiddleware": false,
|
||
"hasDefaultExport": true,
|
||
"hasErrorBoundary": false,
|
||
"module": "https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/route-DayiFhhM.js",
|
||
"imports": [
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/chunk-62JRHF6Z-DVymXer8.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/jsx-runtime-BOIFapZd.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/EngineeringBlogFooter-D4iVF9GH.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/dist-DLh16i5j.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/twMerge-BngH92bT.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/EngineeringPageLayout-BLnuzAa9.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/I18N-nSui3-xL.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/useIntlLocale-DMH2ftuJ.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/react-dom-DSd4XqwN.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/enums-XZV-2aE9.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/HeadingGroup-ClVI31eU.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/Close-DuJl3rCQ.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/AuthorImage-DjAsHjBW.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/ArticleCarousel-DfsjN5YP.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/useBlogPageTitle-BCs3QNtx.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/documentInlineStylesheet-D3gcTLE2.js"
|
||
],
|
||
"css": []
|
||
},
|
||
"_index": {
|
||
"id": "_index",
|
||
"parentId": "~~layout",
|
||
"index": true,
|
||
"caseSensitive": true,
|
||
"hasAction": false,
|
||
"hasLoader": true,
|
||
"hasClientAction": false,
|
||
"hasClientLoader": false,
|
||
"hasClientMiddleware": false,
|
||
"hasDefaultExport": true,
|
||
"hasErrorBoundary": false,
|
||
"module": "https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/route-ByM9IOSL.js",
|
||
"imports": [
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/chunk-62JRHF6Z-DVymXer8.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/jsx-runtime-BOIFapZd.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/EngineeringBlogFooter-D4iVF9GH.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/dist-DLh16i5j.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/twMerge-BngH92bT.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/EngineeringPageLayout-BLnuzAa9.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/I18N-nSui3-xL.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/enums-XZV-2aE9.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/HeadingGroup-ClVI31eU.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/ArticleCarousel-DfsjN5YP.js",
|
||
"https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/documentInlineStylesheet-D3gcTLE2.js"
|
||
],
|
||
"css": []
|
||
}
|
||
},
|
||
"url": "https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/manifest-d053ed2a.js",
|
||
"version": "d053ed2a"
|
||
};
|
||
window.__reactRouterRouteModules = {"root":route0,"~~layout":route1,"$article":route2};
|
||
|
||
import("https://cdn.shopify.com/shopifycloud/world/brochure/production-engineering/assets/entry.client-BaMUKgRA.js");</script><svg class="absolute top-0 start-0 w-0 h-0 pointer-events-none"><defs><symbol id="icon-ai" viewBox="0 0 20 20"><path fill="currentColor" fill-rule="evenodd" d="M5.6542 4a.0737.0737 0 0 0-.0362.0089.0652.0652 0 0 0-.0252.0275l-.183.3346A2.6131 2.6131 0 0 1 4.371 5.4098l-.3346.183a.0652.0652 0 0 0-.0275.0252A.0738.0738 0 0 0 4 5.6543c0 .0146.0038.027.0089.036a.065.065 0 0 0 .0275.0254l.3346.183a2.613 2.613 0 0 1 1.0388 1.0387l.183.3346a.0675.0675 0 0 0 .022.0256.0677.0677 0 0 0 .029.0102.0696.0696 0 0 0 .0587-.0176.0797.0797 0 0 0 .013-.0182l.183-.3346a2.613 2.613 0 0 1 1.0388-1.0387l.3346-.183a.065.065 0 0 0 .0276-.0253.0737.0737 0 0 0 .0088-.0361.0737.0737 0 0 0-.0088-.0362.0651.0651 0 0 0-.0276-.0252l-.3346-.183A2.613 2.613 0 0 1 5.8986 4.371l-.183-.3346a.065.065 0 0 0-.0253-.0275A.0737.0737 0 0 0 5.6542 4Z" clip-rule="evenodd"></path><path fill="none" stroke="currentColor" d="M5.6542 4a.0737.0737 0 0 0-.0362.0089.0652.0652 0 0 0-.0252.0275l-.183.3346A2.6131 2.6131 0 0 1 4.371 5.4098l-.3346.183a.0652.0652 0 0 0-.0275.0252A.0738.0738 0 0 0 4 5.6543c0 .0146.0038.027.0089.036a.065.065 0 0 0 .0275.0254l.3346.183a2.613 2.613 0 0 1 1.0388 1.0387l.183.3346a.0675.0675 0 0 0 .022.0256.0677.0677 0 0 0 .029.0102.0696.0696 0 0 0 .0587-.0176.0797.0797 0 0 0 .013-.0182l.183-.3346a2.613 2.613 0 0 1 1.0388-1.0387l.3346-.183a.065.065 0 0 0 .0276-.0253.0737.0737 0 0 0 .0088-.0361.0737.0737 0 0 0-.0088-.0362.0651.0651 0 0 0-.0276-.0252l-.3346-.183A2.613 2.613 0 0 1 5.8986 4.371l-.183-.3346a.065.065 0 0 0-.0253-.0275A.0737.0737 0 0 0 5.6542 4Zm5.6135 3.05c-.0284.0213-.0673.0615-.0856.1611l-.0314.1706c-.3635 1.976-1.9394 3.5118-3.9364 3.8362-.098.016-.1386.0528-.1604.0801-.0288.036-.0528.0941-.0539.1667-.001.0726.0213.1314.049.1681.021.028.0606.066.158.0847l.1103.0212c1.9479.3741 3.471 1.8861 3.848 3.8196l.0336.1724c.0225.1155.0706.1711.1132.2032.0509.0384.1265.0661.2156.0661.0891 0 .1647-.0277.2157-.0661.0425-.0321.0907-.0877.1132-.2033l.0262-.1343c.3814-1.9565 1.9328-3.4804 3.9077-3.8383.1041-.0189.1426-.0583.1619-.0845.0267-.0362.0503-.0981.0474-.1787-.0029-.0806-.0313-.1494-.0688-.1948-.0305-.0369-.082-.0783-.1892-.0943-2.073-.3091-3.7271-1.9226-4.0485-3.9876-.0155-.1001-.0533-.1414-.0811-.1634-.0368-.0291-.0966-.0537-.1715-.0547-.075-.001-.1355.0219-.173.05Z" clip-rule="evenodd"></path></symbol><symbol id="icon-ai-chats" viewBox="0 0 20 20"><path fill="currentColor" d="M10 1.58c4.85 0 8.83 3.69 8.83 8.3 0 4.6-3.98 8.29-8.83 8.29a9 9 0 0 1-3.69-.76l-3.24.97a.9.9 0 0 1-.99-.38.9.9 0 0 1 0-1.04l.12-.2q.19-.29.28-.56c.14-.4.21-1.06.25-1.62a8 8 0 0 1-1.56-4.7c0-4.61 3.98-8.3 8.83-8.3m0 1c-4.36 0-7.83 3.3-7.83 7.3 0 1.58.54 3.05 1.46 4.25l.12.14-.01.19c-.03.57-.1 1.47-.32 2.08q-.16.43-.41.82l3.2-.96.17-.05.17.08q1.58.72 3.45.74c4.36 0 7.83-3.3 7.83-7.3S14.36 2.59 10 2.59M8.74 7.43q.16 0 .21.17c.13.44.22.88.38 1.3a3 3 0 0 0 2.06 1.86l1 .28q.18.07.18.21 0 .15-.18.2c-.42.13-.84.22-1.25.37a3 3 0 0 0-1.9 2.08l-.3 1q-.01.13-.14.17h-.12q-.12-.04-.14-.18l-.35-1.2a3 3 0 0 0-2.08-1.95l-1.01-.29q-.13-.02-.17-.14v-.12q.04-.13.18-.15.57-.14 1.13-.33A3 3 0 0 0 8.25 8.6l.29-1q.05-.16.2-.17M12.5 5q.09 0 .1.1l.22.7q.3.79 1.12 1.01l.55.16q.1.03.1.11 0 .1-.1.11l-.69.2q-.8.3-1.04 1.14l-.15.55q-.01.07-.08.09h-.07q-.06-.03-.08-.1-.08-.33-.19-.65-.29-.82-1.13-1.07l-.55-.16q-.06 0-.1-.08v-.06q.04-.07.1-.08l.62-.18q.85-.29 1.1-1.15l.15-.55q.03-.1.12-.09"></path></symbol><symbol id="icon-analytics" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10 14.5v-9m-4.5 9v-3m9 3V9m-13-5.5v13h17v-13h-17Z"></path></symbol><symbol id="icon-arrow" viewBox="0 0 14 14"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M2.333 7h9.334m-3.5-3.5 3.5 3.5-3.5 3.5"></path></symbol><symbol id="icon-boost" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M8.5 18.5 8 7.5H6.04a.5.5 0 0 1-.4-.81l3.97-5a.5.5 0 0 1 .78 0l3.97 5a.5.5 0 0 1-.4.81H12l-.5 11m2.5 0 1.5-7.5M6 18.5l-1.1-5.47"></path></symbol><symbol id="icon-chevron" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m18 9-6 6-6-6"></path></symbol><symbol id="icon-computer-tick" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M17.5 14.5v-11a1 1 0 0 0-1-1h-13a1 1 0 0 0-1 1v11M2.5 17.5h15a1 1 0 0 0 1-1v-2h-6v.5a.5.5 0 0 1-.5.5H8a.5.5 0 0 1-.5-.5v-.5h-6v2a1 1 0 0 0 1 1Z"></path><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M7.5 9 9 10.5 12.5 7"></path></symbol><symbol id="icon-credit-card" viewBox="0 0 20 20"><path fill="currentColor" d="M1.5 7.5v-1h17v1h-17Z"></path><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M4.5 13.5h4m-7-9v11a1 1 0 0 0 1 1h15a1 1 0 0 0 1-1v-11a1 1 0 0 0-1-1h-15a1 1 0 0 0-1 1Zm0 2v1h17v-1h-17Z"></path></symbol><symbol id="icon-design" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M14.5 11.5v7m-13-13h7m0 1 4.57-4.52 4.95 4.95L6.95 18M10.5 4.5l5 5m-2 2h5v7H5m0 0A3.5 3.5 0 0 0 8.5 15V1.5h-7V15A3.5 3.5 0 0 0 5 18.5Zm.5-3.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z"></path></symbol><symbol id="icon-discount" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m12.7 6.8-5.4 6.4m.95-5.95a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Zm4.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0ZM5.997 3.417a2.254 2.254 0 0 0 2.179-.902 2.254 2.254 0 0 1 3.648 0 2.254 2.254 0 0 0 2.179.902 2.254 2.254 0 0 1 2.58 2.58c-.133.838.215 1.68.902 2.179 1.24.9 1.24 2.748 0 3.648a2.254 2.254 0 0 0-.902 2.179 2.254 2.254 0 0 1-2.58 2.58 2.254 2.254 0 0 0-2.179.902 2.254 2.254 0 0 1-3.648 0 2.254 2.254 0 0 0-2.179-.902 2.254 2.254 0 0 1-2.58-2.58 2.254 2.254 0 0 0-.902-2.179 2.254 2.254 0 0 1 0-3.648 2.254 2.254 0 0 0 .902-2.179 2.254 2.254 0 0 1 2.58-2.58Z"></path></symbol><symbol id="icon-domain" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10 18.5A8.5 8.5 0 0 1 1.5 10m8.5 8.5a9.3 9.3 0 0 0 1.5-.13m-1.5.13c-1.66 0-3-3.8-3-8.5s1.34-8.5 3-8.5M1.5 10c0-4.7 3.8-8.5 8.5-8.5M1.5 10c0 1.66 3.8 3 8.5 3m-8.5-3c0-1.66 3.8-3 8.5-3s8.5 1.34 8.5 3M10 1.5c4.7 0 8.5 3.8 8.5 8.5M10 1.5c1.66 0 3 3.8 3 8.5m5.5 0a9.3 9.3 0 0 1-.13 1.5M12 12l2 6.5 1.5-3 3-1L12 12Z"></path></symbol><symbol id="icon-drag-and-drop" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M4.5 3.5v0m2 0v0m11 4v-5a1 1 0 0 0-1-1h-13a1 1 0 0 0-1 1v13a1 1 0 0 0 1 1h2m-3-11h15m0 6V10a.5.5 0 0 0-.5-.5h-1.5m-5 0H9a.5.5 0 0 0-.5.5v1.5m4-2h1m-5 4v1m0 2.5v1a.5.5 0 0 0 .5.5h1m1.5-6.5 2 6.5 1.5-3 3-1-6.5-2.5Z"></path></symbol><symbol id="icon-facebook" viewBox="0 0 32 32"><path fill="inherit" d="M32 16.06C32 7.19 24.84 0 16 0S0 7.19 0 16.06c0 7.53 5.17 13.85 12.13 15.58V20.97h-3.3v-4.91h3.3v-2.12c0-5.46 2.47-8 7.82-8 1.01 0 2.76.2 3.47.4v4.45a20.5 20.5 0 0 0-1.84-.06c-2.63 0-3.64 1-3.64 3.6v1.73h5.23l-.9 4.9h-4.33V32A16.04 16.04 0 0 0 32 16.06Z"></path></symbol><symbol id="icon-global" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M18.5 10a8.5 8.5 0 0 1-8.5 8.5m8.5-8.5A8.5 8.5 0 0 0 10 1.5m8.5 8.5c0 1.657-3.806 3-8.5 3s-8.5-1.343-8.5-3m17 0c0-1.657-3.806-3-8.5-3s-8.5 1.343-8.5 3m8.5 8.5A8.5 8.5 0 0 1 1.5 10m8.5 8.5c1.657 0 3-3.806 3-8.5s-1.343-8.5-3-8.5m0 17c-1.657 0-3-3.806-3-8.5s1.343-8.5 3-8.5M1.5 10A8.5 8.5 0 0 1 10 1.5"></path></symbol><symbol id="icon-global-currency" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M3 15.5H2a.5.5 0 0 1-.5-.5V5a.5.5 0 0 1 .5-.5h12.5m0 0-2-2m2 2-2 2m4.5-2h1a.5.5 0 0 1 .5.5v10a.5.5 0 0 1-.5.5H5.5m0 0 2-2m-2 2 2 2m-4-11h1m11 7h1M12 10a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z"></path></symbol><symbol id="icon-global-markets" viewBox="0 0 40 41"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M29.83 8.64a15.9 15.9 0 0 0-12.4-5.95A15.88 15.88 0 1 0 21.9 33.8 M16.8 33.8v-5.07a3.2 3.2 0 0 0-3.18-3.18 3.2 3.2 0 0 1-3.17-3.17v-1.32a4.5 4.5 0 0 0-1.32-3.18l-5.67-5.67 M23.79 4.17a2.44 2.44 0 0 1-2.45 2.44H21a2.8 2.8 0 0 0-2.8 2.8v.1c0 .9-.42 1.76-1.13 2.3l-1.18.91a2.6 2.6 0 0 0-.99 2.02v0a2.55 2.55 0 0 0 2.54 2.55h4.66m12.5-.63h-5.1a3.8 3.8 0 0 0-3.8 3.81v0a3.8 3.8 0 0 0 3.8 3.81h1.27a3.8 3.8 0 0 1 3.81 3.81v0a3.8 3.8 0 0 1-3.8 3.81h-5.09m3.81.64v1.9m1.27-21.59v1.9"></path></symbol><symbol id="icon-instagram" viewBox="0 0 32 32"><path fill="inherit" d="M32 16a16 16 0 1 1-32 0 16 16 0 0 1 32 0Z"></path><path fill="currentColor" d="M12.07 6.57a6.6 6.6 0 0 0-2.3.44c-.63.25-1.16.57-1.69 1.1a4.66 4.66 0 0 0-1.1 1.68 7.3 7.3 0 0 0-.43 2.31 67.24 67.24 0 0 0-.05 3.92c0 2.58.02 2.9.07 3.92.04 1 .2 1.7.44 2.3a4.79 4.79 0 0 0 2.79 2.78c.6.23 1.3.39 2.3.43 1.02.04 1.34.05 3.92.05s2.9-.02 3.91-.07a6.98 6.98 0 0 0 2.3-.44 4.66 4.66 0 0 0 1.69-1.1c.53-.53.85-1.06 1.1-1.69.23-.6.39-1.29.43-2.3.04-1.01.05-1.34.05-3.92s-.02-2.9-.07-3.91a6.97 6.97 0 0 0-.44-2.3 4.66 4.66 0 0 0-1.1-1.69 4.65 4.65 0 0 0-1.69-1.1c-.6-.23-1.3-.39-2.3-.43a66.28 66.28 0 0 0-3.92-.05c-2.58 0-2.9.02-3.91.07Zm.1 17.17a5.27 5.27 0 0 1-1.76-.32 2.96 2.96 0 0 1-1.1-.71 2.95 2.95 0 0 1-.7-1.1 5.26 5.26 0 0 1-.33-1.76c-.05-1-.06-1.3-.07-3.84 0-2.53 0-2.83.05-3.83.04-.93.2-1.43.32-1.77a3 3 0 0 1 1.81-1.8c.33-.14.83-.3 1.76-.33 1-.05 1.3-.06 3.83-.07 2.54 0 2.84 0 3.84.05.93.04 1.43.2 1.77.32a3 3 0 0 1 1.8 1.81c.14.33.3.83.33 1.76.05 1 .06 1.3.07 3.84 0 2.53 0 2.83-.05 3.83-.04.93-.2 1.43-.32 1.77a3 3 0 0 1-1.81 1.8c-.33.14-.83.3-1.76.34-1 .04-1.3.05-3.84.06-2.53 0-2.83 0-3.83-.05Zm7.75-12.82a1.14 1.14 0 1 0 2.28 0 1.14 1.14 0 0 0-2.28 0Zm-8.8 5.09a4.88 4.88 0 1 0 9.76-.02 4.88 4.88 0 0 0-9.76.02Zm1.71 0a3.17 3.17 0 1 1 6.34-.02 3.17 3.17 0 0 1-6.34.02Z"></path></symbol><symbol id="icon-inventory-synced" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M1.5 18V6L10 2l8.5 4v12m-4.02-7.56a4.74 4.74 0 0 0-9.19 1m.23 2.12a4.74 4.74 0 0 0 9.19-1M11.5 10.5h3v-3m-9 9v-3h3"></path></symbol><symbol id="icon-linkedin" viewBox="0 0 32 32"><path fill="inherit" d="M32 16a16 16 0 1 1-32 0 16 16 0 0 1 32 0Z"></path><path fill="currentColor" d="M25 17.4c0-.86-.08-1.7-.34-2.53a3.2 3.2 0 0 0-1.68-2.1A4.88 4.88 0 0 0 20 12.4a3.5 3.5 0 0 0-2.52 1.68c-.01.03-.04.05-.09.1v-1.57h-3.37v11.31h3.5v-.19l.01-5.36c0-.49.05-.98.15-1.46.14-.68.52-1.2 1.22-1.4.2-.05.42-.08.63-.1.95-.06 1.57.39 1.81 1.3.14.54.15 1.08.15 1.62v5.59h3.5V17.4ZM8.29 23.93h3.5v-11.3h-3.5v11.3Zm1.75-16.96a2.04 2.04 0 1 0 0 4.08 2.04 2.04 0 0 0 0-4.08Z"></path></symbol><symbol id="icon-marketing" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.5 12.5v6H8.31a1 1 0 0 1-.98-.8c-.43-1.8-1.3-4.34-3.94-5.8M8.5 4.5v8m-3 0a4 4 0 0 1 0-8H12c4 0 5.5-1.5 6.5-3v14c-1-1.5-2.5-3-6.5-3H5.5Z"></path></symbol><symbol id="icon-mobile" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m8 10 1.5 1.5 3-3M9 3.5h2m-6.5-1v15a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1v-15a1 1 0 0 0-1-1h-9a1 1 0 0 0-1 1"></path></symbol><symbol id="icon-money" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M3.5 6.5h1m11 7h1M12 10a2 2 0 1 1-4 0 2 2 0 0 1 4 0ZM1.5 5v10a.5.5 0 0 0 .5.5h16a.5.5 0 0 0 .5-.5V5a.5.5 0 0 0-.5-.5H2a.5.5 0 0 0-.5.5Z"></path></symbol><symbol id="icon-online" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M3.5 4.5v0m2 0v0m-4 2h17m-17-3v13a1 1 0 0 0 1 1h15a1 1 0 0 0 1-1v-13a1 1 0 0 0-1-1h-15a1 1 0 0 0-1 1Z"></path></symbol><symbol id="icon-pinterest" viewBox="0 0 32 32"><path fill="inherit" d="M10.06 30.86c-.2-1.82-.06-3.56.34-5.24l1.6-6.9a9.5 9.5 0 0 1-.46-2.76c0-2.24 1.08-3.84 2.78-3.84 1.18 0 2.04.82 2.04 2.4 0 .5-.1 1.06-.3 1.7l-.7 2.3c-.14.44-.2.86-.2 1.22 0 1.6 1.22 2.5 2.78 2.5 2.78 0 4.76-2.88 4.76-6.62 0-4.16-2.72-6.82-6.74-6.82-4.48 0-7.32 2.92-7.32 6.98 0 1.64.5 3.16 1.48 4.2-.32.54-.66.64-1.18.64-1.6 0-3.12-2.26-3.12-5.34 0-5.32 4.26-9.56 10.24-9.56 6.28 0 10.22 4.38 10.22 9.78 0 5.4-3.84 9.52-7.98 9.52a5.1 5.1 0 0 1-4.08-1.96l-.82 3.32a15.25 15.25 0 0 1-2.16 4.9 16 16 0 1 0-1.18-.42Z"></path></symbol><symbol id="icon-pos-tick" viewBox="0 0 20 20"><path fill="currentColor" d="M10.5 8.5v-7h1v7h-1Z"></path><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M1.5 18.5h17m-15 0V9a.5.5 0 0 1 .5-.5h12a.5.5 0 0 1 .5.5v9.5M8 14l1.5 1.5 3-3.5m-7-3.5v-6a1 1 0 0 1 1-1h7a1 1 0 0 1 1 1v6m-4-7v7h1v-7h-1Z"></path></symbol><symbol id="icon-sales-up" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.5 4.5h-8a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-6m-4-8v1m4 4h1m-8 0h4v4m2-7 1-1M2 17c5.19-1.44 10-5.66 12-9"></path></symbol><symbol id="icon-save-time" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.5 5.5 10 10l3 3M1.75 10a8.25 8.25 0 1 0 .85-3.65M2.5 2.5v4h4"></path></symbol><symbol id="icon-shipping" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M7.5 14.5a2 2 0 1 1-4 0m4 0a2 2 0 1 0-4 0m4 0h5m-9 0H2a.5.5 0 0 1-.5-.5V4a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5v10.5m6 0a2 2 0 1 1-4 0m4 0a2 2 0 1 0-4 0m4 0h2v-5m-8-4h5l3 4m0 0h-8"></path></symbol><symbol id="icon-shop-app" viewBox="0 0 20 20"><path fill="currentColor" fill-rule="evenodd" d="M8.85 5a6 6 0 0 0-3.27.94L6.7 7.78a4 4 0 0 1 2.17-.61c1.95 0 3.38 1.33 3.38 3.09 0 1.5-1.15 2.61-2.6 2.61-1.19 0-2-.67-2-1.61 0-.57.26-1.04.97-1.35L7.55 8.19a3.1 3.1 0 0 0-2.22 3c0 2.18 1.8 3.81 4.3 3.81 2.93 0 5.04-1.96 5.04-4.78C14.67 7.2 12.22 5 8.85 5" clip-rule="evenodd"></path><rect fill="none" width="19" height="19" x=".5" y=".5" stroke="currentColor" rx="4.5"></rect></symbol><symbol id="logo-shopify-bag" viewBox="0 0 44 50"><path d="M30.0164 5.94322C30.0164 5.94322 29.4539 6.10386 28.5297 6.38498C28.369 5.86289 28.1279 5.26048 27.8064 4.61791C26.7616 2.60988 25.1945 1.52554 23.3461 1.52554C23.2256 1.52554 23.105 1.52554 22.9443 1.56571C22.9041 1.48538 22.8237 1.44522 22.7836 1.3649C21.9799 0.481368 20.9352 0.0797613 19.6895 0.119922C17.2785 0.200243 14.8676 1.92715 12.9388 5.01952C11.5726 7.1882 10.5279 9.91912 10.2466 12.0476C7.47397 12.891 5.54521 13.4934 5.50502 13.5336C4.09863 13.9753 4.05845 14.0155 3.89772 15.3408C3.65662 16.3448 0 44.6581 0 44.6581L30.3781 49.9191V5.86289C30.2174 5.90306 30.0968 5.90305 30.0164 5.94322ZM22.9845 8.11189C21.3772 8.59382 19.6091 9.15607 17.8813 9.67815C18.3635 7.79061 19.3279 5.90305 20.453 4.65807C20.895 4.21631 21.4977 3.69422 22.1808 3.37293C22.8639 4.81872 23.0247 6.78659 22.9845 8.11189ZM19.7297 1.72635C20.2922 1.72635 20.7744 1.84683 21.1763 2.08779C20.5333 2.40908 19.8904 2.93117 19.2877 3.53358C17.7607 5.18016 16.5954 7.75044 16.1132 10.2002C14.6667 10.642 13.2201 11.0838 11.8941 11.4854C12.7379 7.67012 15.9927 1.84683 19.7297 1.72635ZM15.0283 23.8147C15.189 26.385 21.9799 26.9472 22.3817 33.0115C22.663 37.7906 19.8502 41.0436 15.7918 41.2846C10.8895 41.6059 8.19726 38.7143 8.19726 38.7143L9.24201 34.2966C9.24201 34.2966 11.9342 36.3448 14.1041 36.1842C15.5105 36.1039 16.0329 34.9392 15.9927 34.136C15.7918 30.7625 10.2466 30.9633 9.88493 25.4211C9.56347 20.8027 12.6174 16.1039 19.368 15.6621C21.9799 15.5014 23.3059 16.144 23.3059 16.144L21.779 21.9272C21.779 21.9272 20.0511 21.1239 18.0018 21.2846C15.0283 21.4854 14.9881 23.3729 15.0283 23.8147ZM24.5918 7.62996C24.5918 6.42514 24.4311 4.69824 23.8685 3.25245C25.7169 3.6139 26.6009 5.66209 27.0027 6.90707C26.2795 7.10787 25.4758 7.34884 24.5918 7.62996Z" fill="currentColor"></path><path d="M31.3828 49.7589L44.0002 46.6263C44.0002 46.6263 38.5755 9.95967 38.5353 9.71871C38.4951 9.47775 38.2942 9.3171 38.0933 9.3171C37.8924 9.3171 34.3563 9.23678 34.3563 9.23678C34.3563 9.23678 32.1865 7.14843 31.3828 6.34521V49.7589Z" fill="currentColor"></path></symbol><symbol id="icon-social" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m5 16.5 5 2h4.77a1 1 0 0 0 .95-.7l2.45-7.7a2 2 0 0 0-1.9-2.6H11.5m-6.5 9H1.5v-9h5l2.5-6h1c.83 0 1.5.67 1.5 1.5v4.5m-6.5 9v-9m5 0h1.5"></path></symbol><symbol id="icon-taxes" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M14.5 18.5a2 2 0 0 0 2-2v-15m-2 17a2 2 0 0 1-2-2h-11c0 1.1.9 2 2 2h11Zm2-17a2 2 0 0 1 2 2v1h-2m0-3h-10a2 2 0 0 0-1.63.84M4.5 12.5v4M9 10 4 5a1.41 1.41 0 0 0-2 2l5 5m2-2-2 2m2-2 1.5 3.5L7 12m.5-7.5h5m-2 3h3m-1 3h1"></path></symbol><symbol id="icon-tiktok" viewBox="0 0 32 32"><path fill="inherit" d="M32 16a16 16 0 1 1-32 0 16 16 0 0 1 32 0Z"></path><path fill="currentColor" d="M23.94 14.44c-1.57 0-3.1-.48-4.38-1.38v6.28a5.65 5.65 0 0 1-3.78 5.35 5.9 5.9 0 0 1-6.41-1.6 5.67 5.67 0 0 1 1.76-8.85 5.89 5.89 0 0 1 3.42-.56v3.16a2.7 2.7 0 0 0-2.97.97 2.6 2.6 0 0 0 1.35 4.03 2.7 2.7 0 0 0 2.98-.96c.33-.45.5-.99.5-1.54V7.06h3.15a4.2 4.2 0 0 0 1.99 3.6c.7.46 1.54.7 2.4.7v3.08Z"></path></symbol><symbol id="icon-twitter" viewBox="0 0 32 32"><path fill="inherit" d="M32 16a16 16 0 1 1-32 0 16 16 0 0 1 32 0Z"></path><path fill="currentColor" d="M17.71 14.79 24.41 7h-1.58L17 13.76 12.36 7H7l7.03 10.23L7 25.4h1.59l6.14-7.15 4.91 7.15H25l-7.29-10.61Zm-8.55-6.6h2.44l11.23 16.06h-2.44L9.16 8.2Z"></path></symbol><symbol id="icon-user-profile" viewBox="0 0 20 20"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M5 16.5a4 4 0 0 1 4-4h2a4 4 0 0 1 4 4m3.5-6.5a8.5 8.5 0 1 1-17 0 8.5 8.5 0 0 1 17 0ZM13 7.5a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"></path></symbol><symbol id="icon-users" viewBox="0 0 20 16"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M15.5 10.5c1.84 0 3.33 1.5 3.33 3.33v1.67h-1.66M13 7.06a3.33 3.33 0 0 0 0-6.45m-2.5 3.22a3.33 3.33 0 1 1-6.67 0 3.33 3.33 0 0 1 6.67 0M3.83 10.5h6.67c1.84 0 3.33 1.5 3.33 3.33v1.67H.5v-1.67C.5 12 2 10.5 3.83 10.5"></path></symbol><symbol id="icon-youtube" viewBox="0 0 32 32"><path fill="inherit" d="M32 16a16 16 0 1 1-32 0 16 16 0 0 1 32 0Z"></path><path fill="currentColor" d="M25.58 11.19a2.5 2.5 0 0 0-1.76-1.77C22.25 9 16 9 16 9s-6.25 0-7.81.42a2.5 2.5 0 0 0-1.77 1.77C6 12.75 6 16 6 16s0 3.26.42 4.81c.23.87.9 1.54 1.77 1.77C9.75 23 16 23 16 23s6.25 0 7.81-.42a2.5 2.5 0 0 0 1.77-1.77C26 19.26 26 16 26 16s0-3.25-.42-4.81Z"></path><path fill="inherit" d="M14 19v-6l5.2 3-5.2 3Z"></path></symbol></defs></svg></body></html><!--$--><script>window.__reactRouterContext.streamController.enqueue("[{\"_1\":2,\"_3\":-5,\"_4\":-5},\"loaderData\",{\"_5\":6,\"_7\":8},\"actionData\",\"errors\",\"root\",{\"_1991\":1992,\"_47\":48,\"_1993\":556},\"$article\",{\"_9\":10,\"_11\":12,\"_13\":14,\"_15\":16,\"_17\":18,\"_19\":20,\"_21\":22,\"_23\":24,\"_25\":26,\"_27\":28,\"_29\":30,\"_31\":32,\"_33\":34,\"_35\":34,\"_36\":37,\"_38\":39,\"_40\":41,\"_42\":43,\"_44\":45,\"_46\":45,\"_47\":48,\"_49\":50,\"_51\":-7,\"_52\":53,\"_54\":55,\"_56\":57,\"_58\":59,\"_60\":61,\"_62\":63,\"_64\":-7,\"_65\":66},\"article\",{\"_1946\":1947,\"_1948\":1949,\"_1950\":1951,\"_56\":1952,\"_477\":1953,\"_1954\":1955,\"_126\":1956,\"_1897\":1957,\"_13\":1958,\"_1959\":45,\"_1960\":45,\"_189\":1961,\"_1962\":1963,\"_1900\":24,\"_1902\":1964,\"_1965\":45,\"_1966\":1967,\"_1968\":1969,\"_1903\":1967,\"_1970\":1955,\"_1971\":1972},\"metaDescription\",\"We cover our approaches to capacity planning, and how we rolled it out across the org and to dozens of teams. We’ll also share how we validated our capacity plans with scalability tests to make sure they work.\",\"contentHtml\",\"\u003cp style=\\\"text-align: right;\\\"\u003e\u003cstrong\u003eBy Kathryn Tang and Kir Shatrov\u003c/strong\u003e\u003c/p\u003e\\n\u003cp\u003eThe fourth Thursday in November is Thanksgiving in the United States. The day after, Black Friday (coined in 1961), is the first day of the Christmas shopping season and since 2005 it’s the busiest shopping day of the year in North America. Cyber Monday is a more recent development. Getting its name in 2005, it refers to the Monday after the Thanksgiving weekend where retailers focus on sales offered online. At Shopify, we call the weekend including Black Friday and Cyber Monday \u003cb\u003eBFCM\u003c/b\u003e.\u003c/p\u003e\\n\u003cp\u003eFrom the engineering team’s point of view, every BFCM challenges the platform and all the things we’ve shipped throughout the year:\u003c/p\u003e\\n\u003cul\u003e\\n\u003cli\u003eWould our clusters handle two times the number of virtual machines?\u0026nbsp;\u003c/li\u003e\\n\u003cli\u003eWould we hit some sort of limitation on the new network design?\u0026nbsp;\u003c/li\u003e\\n\u003cli\u003eWould the new logging pipeline handle such an increase in traffic?\u0026nbsp;\u003c/li\u003e\\n\u003cli\u003eWhat’s going to be the next scalability bottleneck that we hit?\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003cp\u003eThe other challenge is planning the capacity. We need to understand the magnitude of traffic ahead of us, and how many resources like CPUs and storage we’ll need to handle BFCM sales. On top of that, we need to have enough room in case of something unexpected, and we need to perform a regional failover.\u003c/p\u003e\\n\u003cp\u003eSince 2017, we’ve \u003ca href=\\\"https://shopify.engineering/shopify-infrastructure-collaboration-with-google\\\" target=\\\"_blank\\\" title=\\\"Shopify’s Infrastructure Collaboration with Google\\\" rel=\\\"nofollow noopener noreferrer\\\"\u003epartnered with Google Cloud Platform\u003c/a\u003e (GCP) as our main vendor for the cloud. Over these years, we’ve worked closely with their team on our capacity models, and prior to every BFCM that collaboration gets even closer.\u003c/p\u003e\\n\u003cp\u003eIn this post, we’ll cover our approaches to capacity planning, and how we rolled it out across the org and to dozens of teams. We’ll also share how we validated our capacity plans with scalability tests to make sure they work.\u003c/p\u003e\\n\u003ch1\u003eCapacity Planning\u0026nbsp;\u003c/h1\u003e\\n\u003cp\u003eOur Google Cloud resource needs depend on how much traffic our merchants see during BFCM. We worked with our data scientists to forecast traffic levels and set those levels as a bar for our platform to scale to. Additionally, we looked into historical numbers, applied a safety margin, and projected how many buyers would check out or view online stores.\u003c/p\u003e\\n\u003cfigure\u003e\u003cimg src=\\\"https://cdn.shopify.com/s/files/1/0779/4361/files/GCP-Projects-Capacity-planning.jpg?v=1607013216\\\" alt=\\\"A list of GCP projects for resource planning. The list includes items like memcache, Kafka, MySQL, etc\\\"\u003e\\n\u003cfigcaption\u003eA list of GCP projects for resource planning.\u003c/figcaption\u003e\\n\u003c/figure\u003e\\n\u003cp\u003eWe created a master resourcing plan for our Google Cloud implementation and estimated how things like CPUs and storage would scale to BFCM traffic levels. Owners for our top 10 or so resource areas were tasked to estimate what they needed for BFCM. These estimates were detailed breakdowns of the machine types, geographic locations, and quantities of resources like CPUs. We also added buffers to our overall estimates to allow flexibility to change our resourcing needs, move machines across projects, or failover traffic to different regions if we needed to. What also helps is that we partition each component into a separate GCP project, which makes it a lot easier to think of quotas per every project.\u003c/p\u003e\\n\u003cfigure\u003e\u003cimg src=\\\"https://cdn.shopify.com/s/files/1/0779/4361/files/2020BFCM-Traffice-Scenarios.jpg?v=1607014152\\\" alt=\\\"A line graph showing the BFCM traffic forecasts over time. 4 different scenarios are shown in blue, red, yellow and green. The black line shows existing traffic patterns\\\" loading=\\\"lazy\\\"\u003e\\n\u003cfigcaption\u003eA line graph showing the BFCM traffic forecasts over time\u003c/figcaption\u003e\\n\u003c/figure\u003e\\n\u003cp\u003e2020 is an exceptionally difficult year to plan for. Normally, we’d look at BFCM trends from years prior and predict BFCM traffic with a fairly high level of confidence. This year, COVID-19 lockdowns drove a rapid shift to selling online this spring, and we didn't know what to expect. Would we see a massive increase in online traffic this BFCM, or a global economic depression where consumers stopped buying much at all? To manage heightened uncertainty, we forecasted multiple scenarios and their respective needs for our cloud deployment.\u003c/p\u003e\\n\u003cp\u003eFrom an investment perspective, planning for the largest scale scenario means spending a lot of money very quickly to handle sales that might not happen. Alternatively, not deploying enough machines means having too little computing power and putting our merchant storefronts at risk of outages. It was absolutely vital to avoid anything that would put our merchants at risk of downtime. We decided to scale to our more aggressive growth scenarios to ensure our platform is stable regardless of what happens. We’re transparent with our partners, finance teams, and internal teams about how we thought through these scenarios which helps them make their own operating decisions.\u003c/p\u003e\\n\u003ch1\u003eScalability Testing\u003c/h1\u003e\\n\u003cp\u003eA sheet with a capacity plan is just a starting point. Once we start scaling to projected numbers, there’s a high chance that we’ll hit limits throughout our tech stack that need resolving. In a complex system, there’s always a limit like:\u003c/p\u003e\\n\u003cul\u003e\\n\u003cli\u003ethe number of VMs in a network\u003c/li\u003e\\n\u003cli\u003ethe number of packets that a busy Memcached server can accept\u0026nbsp;\u003c/li\u003e\\n\u003cli\u003ethe number of MB/s your logging pipeline can handle.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003cp\u003eHistorically, every BFCM brought us some scalability surprises, and what’s worse, we’d only notice them when fully scaled prior to BFCM. That left too little time to come up with mitigation plans.\u003c/p\u003e\\n\u003cp\u003eBack in 2018, we decided that a “faux” BFCM in the middle of the year would increase our resilience as an organization and push us to find unknowns that we’d otherwise only discover during the real thing. As we started doing that, it allowed us to find problems at scale more often and created that mental muscle of preparing for critical events and finding unknowns. If you’re exercising and something feels hard, you train more and eventually your muscles get better. Shopify treats BFCM the same way.\u003c/p\u003e\\n\u003cp\u003eWe’ve started the practice of regular scale-up testing at Shopify, and of course we made sure to come up with fun names for each. We’ve had Mayday (2019), Spooky scale-up (2019), and Oktoberfest scale-up (2020). Another fun fact is that our Waterloo teams play a large part in running this testing, and the dates of our Oktoberfest matched the city of Kitchener-Waterloo’s Oktoberfest festivities (It’s the second-largest Oktoberfest in the world).\u003c/p\u003e\\n\u003cp\u003eOktoberfest scale-up’s goal was to simulate this year’s expected BFCM load based on the traffic forecasts from the data science team. And the fact that we run Shopify in cloud on Google Kubernetes Engine allowed us to grab extra compute capacity just for the window of the exercise, and only pay for those hours when we needed it.\u003c/p\u003e\\n\u003cp\u003eInvestment in our internal load testing tooling over the years is fundamental to our ability to run such \u003ca href=\\\"https://shopify.engineering/performance-testing-shopify\\\" target=\\\"_blank\\\" title=\\\"Pummelling the Platform–Performance Testing Shopify\\\" rel=\\\"nofollow noopener noreferrer\\\"\u003elarge scale, platform-wide load tests\u003c/a\u003e. We’ve talked about \u003ca href=\\\"https://shopify.engineering/announcing-go-lua\\\" target=\\\"_blank\\\" title=\\\"Announcing go-lua - Shopify Engineering\\\" rel=\\\"nofollow noopener noreferrer\\\"\u003ego-lua, an open source project that powers our load testing tool\u003c/a\u003e. Thanks to embedded Lua, we feed it with a high-level set of steps for what we want to test: actions like browsing the storefront, adding a product to a card, proceeding to check out, and processing the transaction through a mock payment gateway.\u003c/p\u003e\\n\u003cp\u003eThanks to Oktoberfest scale-up, we identified and then fixed some bottlenecks that could have become an issue for the real BFCM. Doing the test in early October gave us time to address issues.\u003c/p\u003e\\n\u003cp\u003eAfter addressing all the issues, we repeated the scale-up test to see how our mitigations helped. Seeing that going smoothly increased our confidence levels about the upcoming Black Friday and reduced stress levels for all teams.\u003c/p\u003e\\n\u003cp\u003eWe strive for a smooth BFCM and spend a lot of time preparing for it, from capacity planning, to setting the expectations for our vendors, to load testing, and failover simulations. Beyond delivering a smooth holiday season for our merchants, BFCM is time to reflect on the future. As Shopify continues to grow, BFCM traffic levels can become the normal everyday loads we see in the next year. Our job is to bring lessons from events like BFCM to make our systems even more automated, more dynamic, and more resilient. We relish this opportunity to think about where Shopify is going and to architect our platform to scale with it.\u003c/p\u003e\\n\u003cdiv class=\\\"marketing-block marketing-block--light marketing-block--padded my-12 border-l-2 pl-4 [\u0026amp;_h2]:!mt-0 [\u0026amp;_h2]:mb-6 [\u0026amp;_h2]:text-t5 [\u0026amp;_h3]:!mt-0 [\u0026amp;_h3]:mb-6 [\u0026amp;_h3]:text-t7 [\u0026amp;_h4]:!mt-0 [\u0026amp;_h4]:mb-6 [\u0026amp;_h4]:text-t8 [\u0026amp;_ul]:!mt-0 [\u0026amp;_ul]:mb-6 [\u0026amp;_ul:last-child]:mb-0 [\u0026amp;_ol]:!mt-0 [\u0026amp;_ol]:mb-6 [\u0026amp;_ol:last-child]:mb-0 [\u0026amp;_p]:!mt-0 [\u0026amp;_p]:mb-6 [\u0026amp;_p:last-child]:mb-0 text-engineering-dark-text [\u0026amp;_*]:!text-engineering-dark-text bg-transparent border-engineering-highlight\\\"\u003e\\n\u003cp\u003e\u003cstrong\u003eKir Shatrov\u003c/strong\u003e is an Engineering Lead who’s been with Production Engineering at Shopify for the past five years, working on areas from CI/CD infrastructure to sharding and capacity planning.\u003c/p\u003e\\n\u003c/div\u003e\\n\u003cdiv class=\\\"marketing-block marketing-block--light marketing-block--padded my-12 border-l-2 pl-4 [\u0026amp;_h2]:!mt-0 [\u0026amp;_h2]:mb-6 [\u0026amp;_h2]:text-t5 [\u0026amp;_h3]:!mt-0 [\u0026amp;_h3]:mb-6 [\u0026amp;_h3]:text-t7 [\u0026amp;_h4]:!mt-0 [\u0026amp;_h4]:mb-6 [\u0026amp;_h4]:text-t8 [\u0026amp;_ul]:!mt-0 [\u0026amp;_ul]:mb-6 [\u0026amp;_ul:last-child]:mb-0 [\u0026amp;_ol]:!mt-0 [\u0026amp;_ol]:mb-6 [\u0026amp;_ol:last-child]:mb-0 [\u0026amp;_p]:!mt-0 [\u0026amp;_p]:mb-6 [\u0026amp;_p:last-child]:mb-0 text-engineering-dark-text [\u0026amp;_*]:!text-engineering-dark-text bg-transparent border-engineering-highlight\\\"\u003e\\n\u003cp\u003e\u003cstrong\u003eKathryn Tang\u003c/strong\u003e is an Engineering Program Manager who manages our Google Cloud relationship. She has been at Shopify for 4 years, working with a multitude of R\u0026amp;D and commercial teams to derive business insights and guide operating decisions to help us scale.\u003c/p\u003e\\n\u003c/div\u003e\\n\u003chr\u003e\\n\u003cp\u003eWe're planning to DOUBLE our engineering team in 2021 by hiring 2,021 new technical roles (see what we did there?). Our platform handled record-breaking sales over BFCM and commerce isn't slowing down. \u003ca href=\\\"https://www.shopify.com/careers/2021\\\" target=\\\"_blank\\\" title=\\\"We’re planning to double our engineering team in 2021 by hiring 2,021 new technical roles\\\"\u003eHelp us scale \u0026amp; make commerce better for everyone\u003c/a\u003e.\u0026nbsp;\u003c/p\u003e\",\"latestArticles\",[],\"contentNavigationLinks\",[],\"blogHandle\",\"engineering\",\"settings\",{\"_1925\":1926,\"_111\":1927,\"_119\":1928,\"_390\":1929},\"shareImage\",\"https://cdn.shopify.com/s/files/1/0779/4361/articles/BFCM2020Traffic.jpg?v=1607016264\",\"availableRegions\",[1891,1890,1888,1886,1884,1882,1880,1878,1876,1874,1872,1870,1868,1866,1864,1862,1860,1858],\"popularArticles\",[1892,1893,1894,1895],\"hreflangs\",[1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854],\"posContactFormModalContent\",{},\"url\",\"https://shopify.engineering/capacity-planning-shopify\",\"canonicalUrl\",\"rootDomain\",\"shopify.engineering\",\"experimentVariationId\",\"f_2e2905455a798fa9df40308c0b8b53ee:true,f_77c8150780b85c85656903fc3fada251:true\",\"banditAssignments\",[],\"realCountryCode\",\"US\",\"geoCountryCode\",\"\",\"regionCode\",\"site\",{\"_1802\":43,\"_1807\":97,\"_1813\":97,\"_94\":76,\"_1814\":1815,\"_1816\":-7,\"_1806\":-7,\"_1808\":97,\"_1817\":-7,\"_1818\":-7,\"_1819\":1820,\"_1821\":-7,\"_1822\":1823},\"fileRoutePath\",\"/$article\",\"pricingSite\",\"regions\",[1800],\"enPath\",\"/capacity-planning-shopify\",\"handle\",\"engineering-article\",\"geoPricingIsEnabled\",false,\"translations\",{\"_97\":98},\"documentDir\",\"ltr\",\"duxEventHandlerEndpoint\",\"pricing\",{\"_67\":68,\"_69\":70,\"_71\":72,\"_73\":74,\"_75\":76,\"_77\":78,\"_79\":80,\"_81\":82,\"_83\":84,\"_85\":86,\"_87\":88,\"_89\":80,\"_90\":76},\"annualDiscountPercentage\",25,\"basicAnnualPrice\",\"\u003cspan\u003e$29.00 USD\u003c/span\u003e\",\"googleCountryOffer\",\"$500 USD\",\"minimumMonthlyPrice\",\"$5\",\"minimumMonthlyPriceCurrency\",\"USD\",\"paidTrialAmount\",\"$1\",\"paidTrialMonths\",3,\"posProPriceUsd\",\"$89\",\"posRetailLocations\",\"1,000\",\"promoAmount\",{\"_92\":93,\"_94\":76,\"_95\":96},\"signupTypes\",[91],\"trialLength\",\"usd\",\"paid_trial_experience\",\"amount\",1,\"currencyCode\",\"currencySymbol\",\"$\",\"en\",{\"_99\":100,\"_101\":102,\"_103\":104,\"_105\":106,\"_107\":108,\"_109\":110},\"shared/global/translations\",{\"_361\":533,\"_534\":535,\"_536\":537,\"_538\":539,\"_540\":541,\"_542\":543,\"_544\":545,\"_546\":547,\"_548\":549,\"_550\":508,\"_551\":552,\"_553\":554,\"_555\":556,\"_557\":558,\"_559\":560,\"_561\":562,\"_563\":564,\"_565\":566,\"_567\":568,\"_569\":570,\"_571\":572,\"_573\":574,\"_575\":576,\"_577\":578,\"_579\":580,\"_581\":582,\"_583\":584,\"_585\":586,\"_587\":588,\"_589\":590,\"_591\":592,\"_593\":594,\"_595\":596,\"_597\":598,\"_599\":600,\"_601\":213,\"_602\":603,\"_604\":605,\"_606\":607,\"_608\":609,\"_610\":611,\"_612\":613,\"_614\":615,\"_616\":617,\"_618\":619,\"_620\":621,\"_622\":623,\"_624\":625,\"_626\":627,\"_628\":629,\"_630\":631,\"_632\":633,\"_634\":635,\"_636\":637,\"_638\":639,\"_640\":641,\"_642\":643,\"_644\":645,\"_646\":647,\"_648\":649,\"_650\":651,\"_652\":653,\"_654\":655,\"_656\":657,\"_658\":659,\"_660\":661,\"_662\":663,\"_664\":665,\"_666\":667,\"_668\":669,\"_670\":671,\"_672\":673,\"_674\":675,\"_676\":677,\"_678\":679,\"_680\":681,\"_682\":683,\"_684\":685,\"_686\":687,\"_688\":689,\"_690\":691,\"_692\":693,\"_694\":695,\"_696\":697,\"_698\":699,\"_700\":701,\"_702\":703,\"_704\":705,\"_706\":707,\"_708\":709,\"_710\":711,\"_712\":713,\"_714\":715,\"_716\":717,\"_718\":719,\"_720\":721,\"_722\":723,\"_724\":725,\"_726\":727,\"_728\":665,\"_729\":730,\"_731\":732,\"_733\":734,\"_735\":736,\"_737\":738,\"_739\":740,\"_741\":742,\"_743\":744,\"_745\":746,\"_747\":748,\"_749\":750,\"_751\":752,\"_753\":754,\"_755\":756,\"_757\":758,\"_759\":760,\"_761\":762,\"_763\":764,\"_765\":766,\"_767\":768,\"_769\":770,\"_771\":772,\"_773\":774,\"_775\":776,\"_777\":778,\"_779\":780,\"_781\":782,\"_783\":784,\"_785\":786,\"_787\":788,\"_789\":790,\"_791\":792,\"_793\":794,\"_795\":796,\"_797\":798,\"_799\":800,\"_801\":802,\"_803\":804,\"_805\":806,\"_807\":800,\"_808\":809,\"_810\":811,\"_812\":813,\"_814\":815,\"_816\":817,\"_818\":819,\"_820\":489,\"_821\":822,\"_823\":824,\"_825\":826,\"_827\":828,\"_829\":830,\"_831\":832,\"_833\":437,\"_834\":835,\"_836\":837,\"_838\":470,\"_839\":613,\"_840\":841,\"_842\":613,\"_843\":844,\"_845\":846,\"_847\":848,\"_849\":850,\"_851\":852,\"_853\":854,\"_855\":856,\"_857\":858,\"_859\":860,\"_861\":862,\"_863\":824,\"_864\":436,\"_865\":866,\"_867\":868,\"_869\":870,\"_871\":872,\"_873\":874,\"_875\":876,\"_877\":846,\"_878\":879,\"_880\":437,\"_881\":835,\"_882\":883,\"_884\":844,\"_885\":886,\"_887\":888,\"_889\":890,\"_891\":892,\"_893\":894,\"_895\":896,\"_897\":898,\"_899\":900,\"_901\":902,\"_903\":904,\"_905\":906,\"_907\":908,\"_909\":910,\"_911\":912,\"_913\":914,\"_915\":916,\"_917\":918,\"_919\":920,\"_921\":922,\"_923\":924,\"_925\":926,\"_927\":928,\"_929\":930,\"_931\":932,\"_933\":890,\"_934\":935,\"_936\":937,\"_938\":939,\"_940\":941,\"_942\":943,\"_944\":945,\"_946\":947,\"_948\":949,\"_950\":951,\"_952\":953,\"_954\":955,\"_956\":957,\"_958\":959,\"_960\":961,\"_962\":963,\"_964\":965,\"_966\":967,\"_968\":969,\"_970\":971,\"_972\":973,\"_974\":975,\"_976\":977,\"_978\":979,\"_980\":981,\"_982\":983,\"_984\":985,\"_986\":987,\"_988\":989,\"_990\":991,\"_992\":993,\"_994\":995,\"_996\":997,\"_998\":999,\"_1000\":1001,\"_1002\":1003,\"_1004\":1005,\"_1006\":1007,\"_1008\":1009,\"_1010\":1011,\"_1012\":1013,\"_1014\":1015,\"_1016\":1017,\"_1018\":1019,\"_1020\":1021,\"_1022\":1023,\"_1024\":1025,\"_1026\":1027,\"_1028\":1029,\"_1030\":1031,\"_1032\":1033,\"_1034\":1035,\"_1036\":1037,\"_1038\":1039,\"_1040\":1041,\"_1042\":1043,\"_1044\":1045,\"_1046\":1047,\"_1048\":1049,\"_1050\":1051,\"_1052\":1053,\"_1054\":1055,\"_1056\":1057,\"_1058\":1059,\"_1060\":1061,\"_1062\":1063,\"_1064\":1065,\"_1066\":1067,\"_1068\":1069,\"_1070\":1071,\"_1072\":1073,\"_1074\":1075,\"_1076\":1077,\"_1078\":1079,\"_1080\":1081,\"_1082\":1083,\"_1084\":1085,\"_1086\":1087,\"_1088\":1089,\"_1090\":1091,\"_1092\":1093,\"_1094\":1095,\"_1096\":1097,\"_1098\":1099,\"_1100\":1101,\"_1102\":1103,\"_1104\":1105,\"_1106\":1107,\"_1108\":1109,\"_1110\":1111,\"_1112\":1113,\"_1114\":1115,\"_1116\":1117,\"_1118\":1119,\"_1120\":1121,\"_1122\":1123,\"_1124\":1125,\"_1126\":437,\"_1127\":844,\"_1128\":1129,\"_1130\":1129,\"_1131\":1132,\"_1133\":1134,\"_1135\":1136,\"_1137\":1138,\"_1139\":1140,\"_1141\":1142,\"_1143\":1144,\"_1145\":1146,\"_1147\":1148,\"_1149\":1150,\"_1151\":1152,\"_1153\":1154,\"_1155\":1156,\"_1157\":1158,\"_1159\":916,\"_1160\":1161,\"_1162\":1163,\"_1164\":1165,\"_1166\":1167,\"_1168\":1169,\"_1170\":1171,\"_1172\":1173,\"_1174\":1175,\"_1176\":1177,\"_1178\":1179,\"_1180\":1181,\"_1182\":1183,\"_1184\":1185,\"_1186\":1187,\"_1188\":1189,\"_1190\":1191,\"_1192\":1193,\"_1194\":1195,\"_1196\":1197,\"_1198\":1199,\"_1200\":1201,\"_1202\":1203,\"_1204\":1205,\"_1206\":1207,\"_1208\":1209,\"_1210\":1211,\"_1212\":1213,\"_1214\":1215,\"_1216\":1217,\"_1218\":1219,\"_1220\":1221,\"_1222\":1223,\"_1224\":1225,\"_1226\":1227,\"_1228\":1229,\"_1230\":1231,\"_1232\":1233,\"_1234\":1235,\"_1236\":1237,\"_1238\":1239,\"_1240\":1241,\"_1242\":1243,\"_1244\":1245,\"_1246\":1247,\"_1248\":1249,\"_1250\":1243,\"_1251\":1252,\"_1253\":489,\"_1254\":1255,\"_1256\":850,\"_1257\":1258,\"_1259\":1260,\"_1261\":1262,\"_1263\":1264,\"_1265\":1266,\"_1267\":1268,\"_1269\":1270,\"_1271\":1272,\"_1273\":1274,\"_1275\":1276,\"_1277\":1278,\"_1279\":1280,\"_1281\":1282,\"_1283\":1284,\"_1285\":1286,\"_1287\":1288,\"_1289\":1290,\"_1291\":1292,\"_1293\":1294,\"_1295\":1296,\"_1297\":1298,\"_1299\":1300,\"_1301\":1302,\"_1303\":1304,\"_1305\":1306,\"_1307\":1308,\"_1309\":1310,\"_1311\":1312,\"_1313\":1314,\"_1315\":1316,\"_1317\":1318,\"_1319\":1320,\"_1321\":1322,\"_1323\":1324,\"_1325\":1326,\"_1327\":1328,\"_1329\":1330,\"_1331\":1332,\"_1333\":1334,\"_1335\":1336,\"_1337\":1338,\"_1339\":1340,\"_1341\":1342,\"_1343\":1344,\"_1345\":1111,\"_1346\":1347,\"_1348\":1349,\"_1350\":1215,\"_1351\":1352,\"_1353\":1354,\"_1355\":1356,\"_1357\":1358,\"_1359\":1360,\"_1361\":1362,\"_1363\":1099,\"_1364\":854,\"_1365\":1366,\"_1367\":854,\"_1368\":852,\"_1369\":1370,\"_1371\":1372,\"_1373\":1374,\"_1375\":1376,\"_1377\":470,\"_1378\":1379,\"_1380\":1381,\"_1382\":1383,\"_1384\":1385,\"_1386\":1387,\"_1388\":1389,\"_1390\":1391,\"_1392\":1393,\"_1394\":1395,\"_1396\":1397,\"_1398\":1399,\"_1400\":1401,\"_1402\":1403,\"_1404\":1405,\"_1406\":1407,\"_1408\":1409,\"_1410\":858,\"_1411\":1412,\"_1413\":1414,\"_1415\":1416,\"_1417\":918,\"_1418\":1419,\"_1420\":1421,\"_1422\":1423,\"_1424\":1425,\"_1426\":1427,\"_1428\":1429,\"_1430\":1431,\"_1432\":1433,\"_1434\":914,\"_1435\":45,\"_1436\":1437,\"_1438\":1439,\"_1440\":1441,\"_1442\":1443,\"_1444\":1445,\"_1446\":1447,\"_1448\":1449,\"_1450\":1451,\"_1452\":1453,\"_1454\":1455,\"_1456\":1457,\"_1458\":1459,\"_1460\":854,\"_1461\":1462,\"_1463\":1464,\"_1465\":1466,\"_1467\":1468,\"_1469\":1470,\"_1471\":1472,\"_1473\":1474,\"_1475\":828,\"_1476\":1477,\"_1478\":1479,\"_1480\":1481,\"_1482\":1483,\"_1484\":1485,\"_1486\":1487,\"_1488\":1489,\"_1490\":1491,\"_1492\":1493,\"_1494\":1495,\"_1496\":1497,\"_1498\":1499,\"_1500\":1501,\"_1502\":1503,\"_1504\":1505,\"_1506\":1507,\"_1508\":1509,\"_1510\":1511,\"_1512\":437,\"_1513\":1514,\"_1515\":1516,\"_1517\":1518,\"_1519\":1520,\"_1521\":1522,\"_1523\":1524,\"_1525\":1526,\"_1527\":941,\"_1528\":1529,\"_1530\":1531,\"_1532\":1533,\"_1534\":1535,\"_1536\":1537,\"_1538\":1539,\"_1540\":1541,\"_1542\":1543,\"_1544\":1545,\"_1546\":1547,\"_1548\":1549,\"_1550\":1551,\"_1552\":1001,\"_1553\":1007,\"_1554\":1555,\"_1556\":1557,\"_1558\":1559,\"_1560\":1561,\"_1562\":1563,\"_1564\":1565,\"_1566\":1567,\"_1568\":1569,\"_1570\":1571,\"_1572\":1573,\"_1574\":1575,\"_1576\":1577,\"_1578\":1455,\"_1579\":1580,\"_1581\":1582,\"_1583\":1584,\"_1585\":1586,\"_1587\":1588,\"_1589\":924,\"_1590\":1081,\"_1591\":1592,\"_1593\":1520,\"_1594\":1095,\"_1595\":1107,\"_1596\":1121,\"_1597\":1598,\"_1599\":1600,\"_1601\":1136,\"_1602\":1603,\"_1604\":1605,\"_1606\":1607,\"_1608\":1609,\"_1610\":1611,\"_1612\":1613,\"_1614\":1615,\"_1616\":1617,\"_1618\":1619,\"_1620\":1621,\"_1622\":1489,\"_1623\":1624,\"_1625\":1626,\"_1627\":1491,\"_1628\":1095,\"_1629\":1284,\"_1630\":1631,\"_1632\":1633,\"_1634\":1635,\"_1636\":1495,\"_1637\":1298,\"_1638\":1639,\"_1640\":1491,\"_1641\":1642,\"_1643\":1644,\"_1645\":1646,\"_1647\":1123,\"_1648\":1501,\"_1649\":1336,\"_1650\":1338,\"_1651\":846,\"_1652\":943,\"_1653\":1654,\"_1655\":1592,\"_1656\":1657,\"_1658\":854,\"_1659\":1660,\"_1661\":1662,\"_1663\":1664,\"_1665\":1666,\"_1667\":1668,\"_1669\":1389,\"_1670\":1518,\"_1671\":1672,\"_1673\":1674,\"_1675\":1676,\"_1677\":1678,\"_1679\":1518,\"_1680\":1681,\"_1682\":1683,\"_1684\":1685,\"_1686\":1687,\"_1688\":1689,\"_1690\":45,\"_1691\":1692,\"_1693\":1694,\"_1695\":965,\"_1696\":1697,\"_1698\":1015,\"_1699\":1700,\"_1701\":1702,\"_1703\":1704,\"_1705\":1706,\"_1707\":1708,\"_1709\":1710,\"_1711\":1119,\"_1712\":1134,\"_1713\":1575,\"_1714\":1715,\"_1716\":1717,\"_1718\":1719,\"_1720\":1229,\"_1721\":1245,\"_1722\":1723,\"_1724\":1300,\"_1725\":1726,\"_1727\":1509,\"_1728\":1729,\"_1730\":1639,\"_1731\":1732,\"_1733\":1734,\"_1735\":1736,\"_1737\":1429,\"_1738\":1739,\"_1740\":1741,\"_1742\":1743,\"_1744\":1745,\"_1746\":1747,\"_1748\":1749,\"_1750\":1749,\"_1751\":1215,\"_1752\":1215,\"_1753\":1754,\"_1755\":1756,\"_1757\":1758,\"_1759\":1760,\"_1761\":1762,\"_1763\":1764,\"_1765\":1745,\"_1766\":1747,\"_1767\":1768,\"_1769\":1768,\"_1770\":1771,\"_1772\":1771,\"_1773\":1774,\"_1775\":1774,\"_1776\":1777,\"_1778\":1764,\"_1779\":1780,\"_1781\":1782,\"_1783\":1784,\"_1785\":1786,\"_1787\":1788,\"_1789\":1790,\"_1791\":1792,\"_1793\":1794,\"_1795\":574,\"_1796\":1797,\"_1798\":1799},\"pages/blogSubNav\",{\"_361\":362,\"_504\":505},\"pages/$article/content\",{\"_361\":362,\"_363\":364,\"_121\":365,\"_366\":367,\"_368\":369,\"_370\":371,\"_372\":373,\"_374\":375,\"_376\":377,\"_378\":379,\"_380\":381,\"_119\":382,\"_15\":383,\"_384\":385,\"_386\":387,\"_388\":389,\"_390\":391},\"pages/$article/guide_ctas\",{\"_129\":130},\"pages/$article/settings\",{\"_111\":112},\"pages/$article/translations\",{},\"images\",{\"_113\":114,\"_115\":116,\"_117\":118,\"_119\":120,\"_121\":122},\"guides-modal-default\",\"https://cdn.shopify.com/shopifycloud/brochure/assets/content-marketing/blog/guides/default-popup-small-507879111d55acdd759b202ab869ea0b8bd0f4af9f9aaa7c540efe59b8e046db.jpg\",\"guides-modal-photography\",\"https://cdn.shopify.com/b/shopify-brochure2-assets/1bd4b072dc187a774c9af650d0f16d0b.jpg\",\"guides-modal-seo\",\"https://cdn.shopify.com/b/shopify-brochure2-assets/63781344c2932de6e553a54b02291692.jpg\",\"subscription\",{\"_126\":127},\"articleNavigation\",{\"_123\":124},\"banner\",{\"_97\":125},\"https://cdn.shopify.com/b/shopify-brochure2-assets/e570727d45209fec56c410f802faa0fe.png\",\"image\",{\"_97\":128},\"https://cdn.shopify.com/b/shopify-brochure2-assets/c46f986d892538f4b0a15f25692330f7.png?originalWidth=1420\u0026originalHeight=1040\",\"guidesCta\",{\"_131\":132,\"_133\":134,\"_135\":136,\"_137\":138,\"_139\":140,\"_141\":142,\"_143\":144,\"_145\":146,\"_147\":148,\"_149\":150,\"_151\":152,\"_153\":154,\"_155\":156,\"_157\":158,\"_159\":160,\"_161\":162,\"_163\":164,\"_165\":166,\"_167\":168,\"_169\":170,\"_171\":172,\"_173\":174,\"_175\":176,\"_177\":178,\"_179\":180,\"_181\":182,\"_183\":184,\"_185\":186,\"_187\":188,\"_189\":190,\"_191\":192,\"_193\":194,\"_195\":196,\"_197\":198,\"_199\":200,\"_201\":202,\"_203\":204,\"_205\":206,\"_207\":208,\"_209\":210,\"_211\":212,\"_213\":214},\"modal\",{\"_357\":358,\"_359\":360},\"analytics\",{\"_215\":354,\"_217\":355,\"_219\":225,\"_221\":356},\"back_to_school\",{\"_215\":351,\"_217\":352,\"_219\":229,\"_221\":353,\"_231\":247},\"brand_storytelling\",{\"_215\":347,\"_217\":348,\"_219\":349,\"_221\":350},\"branding\",{\"_215\":344,\"_217\":345,\"_219\":220,\"_221\":346},\"businessplan\",{\"_215\":341,\"_217\":342,\"_219\":241,\"_221\":343},\"businessideas\",{\"_215\":337,\"_217\":338,\"_219\":339,\"_221\":340},\"case_studies\",{\"_215\":333,\"_217\":334,\"_219\":335,\"_221\":336},\"competitive\",{\"_215\":330,\"_217\":331,\"_219\":241,\"_221\":332},\"copywriting\",{\"_215\":327,\"_217\":328,\"_219\":220,\"_221\":329},\"customerservice\",{\"_215\":325,\"_217\":326,\"_219\":220,\"_221\":222},\"design\",{\"_215\":322,\"_217\":323,\"_219\":220,\"_221\":324},\"email\",{\"_215\":319,\"_217\":320,\"_219\":225,\"_221\":321},\"googleshopping\",{\"_215\":316,\"_217\":317,\"_219\":225,\"_221\":318},\"hiring_questions\",{\"_215\":313,\"_217\":314,\"_219\":311,\"_221\":315,\"_231\":247},\"holiday_selling_2021\",{\"_215\":309,\"_217\":310,\"_219\":311,\"_221\":312,\"_231\":247},\"inventory_templates\",{\"_215\":305,\"_217\":306,\"_219\":245,\"_221\":307,\"_231\":308},\"opening_closing_checklist\",{\"_215\":302,\"_217\":303,\"_219\":259,\"_221\":304,\"_231\":247},\"optimization\",{\"_215\":299,\"_217\":300,\"_219\":220,\"_221\":301},\"parentpreneur\",{\"_215\":295,\"_217\":296,\"_219\":297,\"_221\":298},\"phonecases\",{\"_215\":291,\"_217\":292,\"_219\":293,\"_221\":294},\"photography\",{\"_215\":288,\"_217\":289,\"_219\":230,\"_221\":290},\"popup_guide\",{\"_215\":285,\"_217\":286,\"_219\":230,\"_221\":287,\"_231\":247},\"pressrelease\",{\"_215\":282,\"_217\":283,\"_219\":241,\"_221\":284},\"productivity\",{\"_215\":279,\"_217\":280,\"_219\":220,\"_221\":281},\"products\",{\"_215\":275,\"_217\":276,\"_219\":277,\"_221\":278},\"retail_marketing\",{\"_215\":272,\"_217\":273,\"_219\":230,\"_221\":274,\"_231\":247},\"retention_audit\",{\"_215\":268,\"_217\":269,\"_219\":270,\"_221\":271,\"_231\":247},\"rotating_schedules\",{\"_215\":265,\"_217\":266,\"_219\":245,\"_221\":267,\"_231\":247},\"seo\",{\"_215\":262,\"_217\":263,\"_219\":259,\"_221\":264},\"sfn_interview\",{\"_215\":260,\"_217\":261,\"_219\":259,\"_221\":236},\"sfn_outsource\",{\"_215\":257,\"_217\":258,\"_219\":259,\"_221\":236},\"shipping\",{\"_215\":253,\"_217\":254,\"_219\":255,\"_221\":256,\"_231\":232},\"social\",{\"_215\":248,\"_217\":249,\"_219\":250,\"_221\":252,\"_231\":232},\"social_template\",{\"_215\":248,\"_217\":249,\"_219\":250,\"_221\":251,\"_231\":247},\"store_layouts\",{\"_215\":243,\"_217\":244,\"_219\":245,\"_221\":246,\"_231\":247},\"swot\",{\"_215\":239,\"_217\":240,\"_219\":241,\"_221\":242},\"tax_season\",{\"_215\":237,\"_217\":238,\"_219\":229,\"_221\":230,\"_231\":232},\"trust\",{\"_215\":233,\"_217\":234,\"_219\":235,\"_221\":236},\"ttp_guide\",{\"_215\":227,\"_217\":228,\"_219\":229,\"_221\":230,\"_231\":232},\"twitter\",{\"_215\":223,\"_217\":224,\"_219\":225,\"_221\":226},\"video\",{\"_215\":216,\"_217\":218,\"_219\":220,\"_221\":222},\"heading\",\"Free Reading List: Video Marketing Tips and Tricks\",\"content\",\"Video marketing is a powerful tool you can’t afford to ignore. Get a crash course with our free, curated list of high-impact articles.\",\"cta\",\"Get the free reading list\",\"modal_headline\",\"Get the reading list delivered right to your inbox.\",\"Free Ebook: Twitter Marketing for Small Businesses\",\"This guide will teach you everything from earning your first followers to getting the most out of Twitter’s advertising platform. Claim your free download to get instant access.\",\"Get the free ebook now\",\"Get Twitter Marketing for Small Businesses delivered right to your inbox.\",\"Free Download: The Online Sellers Guide to In-Person Sales\",\"In-person selling is more approachable than ever. This guide covers why selling in person can reduce customer acquisition costs, how to build a plan that will scale with your business, and tactics from ecommerce sellers that made the move successfully.\",\"Get your free guide now\",\"Get your free guide\",\"modal_success_heading\",\"Thanks for downloading. You'll receive your free copy soon. In the meantime, start building your store with a free trial of Shopify.\",\"Free: Shopify Store Trust Checklist\",\"Shopify’s research team conducted a series of in-depth interviews with North American shoppers to learn how customer trust is formed in online stores. This checklist is a summary of their findings, created to help business owners understand what essential aspects of their online store experience creates trust among customers, along with the trust-busting mistakes to avoid.\",\"Get the checklist now\",\"Get the checklist delivered right to your inbox.\",\"Free Download: 6 Steps to Get Your Business Ready for Tax Season\",\"Tax season is stressful for any business owner. This guide will go through the process of filing income taxes in America and provide you with checklists to keep you organized and prepared.\",\"Free: SWOT Analysis Template\",\"Get your free SWOT Analysis Template. Use this free PDF to future-proof your business by identifying your strengths, weaknesses, opportunities, and threats.\",\"Get the template now\",\"Get the SWOT analysis template delivered right to your inbox.\",\"Free Download: Store Layout Templates\",\"Trying to decide which layout is right for your store? Download these free templates to learn which types of layouts work best for different industries and draw inspiration for your own design.\",\"Get your free templates\",\"Get these free templates delivered right to your inbox.\",\"Thanks for downloading. You'll receive your free download soon. In the meantime, start building your store with a free trial of Shopify.\",\"Social media strategy and planning templates\",\"Ready to get started with your social media strategy? These free, customizable templates give you tools to plan and execute a strategy that connects you with your target audience while keeping your content calendar organized.\",\"Download now and start seeing results\",\"Get social media strategy and planning templates delivered right to your inbox.\",\"Get your social media strategy and planning templates delivered right to your inbox.\",\"The Shopify guide to shipping and fulfillment\",\"Boost customer satisfaction while driving sales growth for your ecommerce business with an effective shipping and fulfillment strategy. Use this guide to create a plan that covers all aspects of shipping and fulfillment, from how much to charge your customers to choosing the right fulfillment method.\",\"Download now and start optimizing your operations\",\"Get our shipping and fulfillment guide delivered right to your inbox.\",\"Free Checklist: Are You Ready to Outsource Your Fulfillment?\",\"Trusting a third party logistics (3PL) provider with your inventory and your customer experience is a significant investment. These questions will help determine if it's time to outsource your fulfillment and take the next step in growing your business.\",\"Get the free checklist\",\"Free Checklist: How to Interview a Third Party Logistics Provider\",\"Outsourcing fulfillment is a significant investment. Here’s a checklist of questions to ask in preparation of choosing the right fulfillment provider and transitioning your business.\",\"Free Download: SEO Checklist\",\"Want to rank higher in search results? Get access to our free, checklist on search engine optimization.\",\"Get our SEO Checklist delivered right to your inbox.\",\"Free Download: Rotating Schedules Templates\",\"Struggling to keep your stores fully staffed and running smoothly? Consider implementing a rotating shift program. Download these free templates to find the right schedule for you and your employees.\",\"Get these free Rotating Schedules Templates delivered right to your inbox.\",\"Free Download: Retention Audit Checklist\",\"Struggling with customer retention? This free checklist will help you build a retention mindset throughout your company by auditing retention strategies at every level of your business.\",\"Get your free checklist\",\"Get this free Retention Audit Checklist PDF delivered right to your inbox.\",\"Free Download: From Clicks to Customers: How to Measure Your Retail Store's Marketing Success\",\"Every marketing campaign is an investment of your time, energy, and money. Do you ever wonder if your efforts were worth it? Read this guide and build a framework to plan, track, and measure the success of retail marketing campaigns.\",\"Get your free Retail Marketing Success PDF delivered right to your inbox.\",\"Free Guide: How to Find a Profitable Product to Sell Online\",\"Excited about starting a business, but not sure where to start? This free, comprehensive guide will teach you how to find great, newly trending products with high sales potential.\",\"Get the free guide\",\"Get How To Find A Product To Sell Online: The Definitive Guide PDF delivered right to your inbox.\",\"Free Reading List: Ecommerce Motivation\",\"Having trouble focusing on growing your small business? Get access to our free, curated list of high-impact productivity articles.\",\"Get our Ecommerce Motivation reading list delivered right to your inbox.\",\"Free: Press Release Template\",\"To help you get started, we put together this template to help you structure your story using a common press release format. You can replace each component with your own information and adapt it according to your needs.\",\"Get the press release template delivered right to your inbox.\",\"Pop-Up Shop Quickstart Guide\",\"Thinking about hosting a Pop-Up Shop? This free guide includes 3 checklists that help frame what you're looking to accomplish through your Pop-Up Shop, different types of Pop-Up Shops, and design ideas to help get you started.\",\"Get your Pop-Up Shop Quickstart Guide delivered right to your inbox.\",\"Free Guide: DIY Product Photography\",\"Learn how to take beautiful product photos on a budget with our free, comprehensive video guide.\",\"Get our DIY Guide to Beautiful Product Photography delivered right to your inbox.\",\"Get a Free Phone Case Business in a Box\",\"Free high quality phone case stock photos and a list of some places you can look to find phone case suppliers to work with.\",\"Download startup bundle\",\"Get our startup bundle delivered right to your inbox.\",\"Playbook for the Aspiring Parentpreneur\",\"Unleash your creativity and turn your passion into a thriving business with our Parentprenuer brainstorming guide. Discover new ideas, set realistic goals, and map out a plan for success.\",\"Download now\",\"Check your inbox for your copy of the Parentpreneur Playbook.\",\"Free Reading List: Conversion Optimization for Beginners\",\"Turn more website visitors into customers by getting a crash course in conversion optimization. Access our free, curated list of high-impact articles below.\",\"Get our Conversion Optimization reading list delivered right to your inbox.\",\"Free Checklist for Opening and Closing Your Store\",\"Ensure all protocols and procedures are completed each time you open and close your store with this handy, easy-to-follow checklist.\",\"Get our Opening and Closing Checklist delivered right to your inbox.\",\"5 Free Templates to Better Understand Your Inventory\",\"Calculate your businesses cost of goods sold, sell through rate, inventory turnover, saftey stock, economic order quantity, or reorder point with ease using these custom templates. (No math required!)\",\"Get your Inventory Templates delivered right to your inbox.\",\"Thanks for downloading. You'll receive your free templates soon. In the meantime, start building your store with a free trial of Shopify.\",\"Free Holiday Selling Guide: Top 10 Holiday Selling Tips for Retail Stores\",\"A sale can happen anywhere, at any time. Use our top 10 strategies to unify your customer touch points and set yourself up for holiday success.\",\"Get the free guide now\",\"Get our Top 10 Holiday Selling Tips for Retail Stores delivered right to your inbox.\",\"Free Guide: Interview Questions for Hiring Retail Employees\",\"Hiring competent retail employees is becoming increasingly challenging. Use this guide to ask the right questions during the interview process to ensure you hire the right people for your store.\",\"Get our guide Interview Questions for Hiring Retail Employees delivered right to your inbox.\",\"Free Ebook: Google Shopping for Small Businesses\",\"Google Shopping ads are one of the leading traffic sources that can give you the ultimate edge. Discover this hidden gem often overlooked by your competition.\",\"Get Google Shopping for Small Businesses delivered right to your inbox.\",\"Free Ebook: How to Grow Your Ecommerce Business with Email Marketing\",\"Whether you're just getting started or dreaming up your next big campaign, this email marketing guide will provide you with insights and ideas to help your business grow.\",\"Get our Email Marketing guide delivered right to your inbox.\",\"Free Reading List: Online Store Design Tips\",\"Your online store's appearance can have a big impact sales. Unleash your inner designer with our free, curated list of high-impact articles.\",\"Get our Store Design reading list delivered right to your inbox.\",\"Free Reading List: Customer Service Strategies\",\"Focusing on customer service can turn negative interactions into positive reviews (and repeat customers). Learn how with our free, curated list of high-impact articles.\",\"Free Reading List: Copywriting Tactics for Entrepreneurs\",\"Is your website content costing you sales? Learn how to improve your website copy with our free, curated list of high-impact articles.\",\"Get our Copywriting Tactics reading list delivered right to your inbox.\",\"Free: Competitive Analysis Template\",\"By evaluating the strengths and weaknesses of your competition, you can begin to formulate how to give your company an advantage. Download our free competitive analysis template and gain an edge over the competition.\",\"Get the competitive analysis template delivered right to your inbox.\",\"Free Video Series: Ecommerce Inspiration\",\"Feeling uninspired? Watch some of the world's most successful entrepreneurs share their best advice for new business owners.\",\"Get the free video series\",\"Get our Ecommerce Inspiration video series delivered right to your inbox.\",\"Free: The Big List of Business Ideas\",\"To help you find the inspiration to start, we compiled a list of 100+ in-demand business ideas, broken down into categories like fitness, apparel, and gaming.\",\"Get the list now\",\"Get the big list of business ideas delivered right to your inbox.\",\"Free: Business Plan Template\",\"Business planning is often used to secure funding, but plenty of business owners find writing a plan valuable, even if they never work with an investor. That’s why we put together a free business plan template to help you get started.\",\"Get the business plan template delivered right to your inbox.\",\"Free Reading List: How to Brand Your Business\",\"A great brand can help your products stand out from the crowd. Get a crash course in small business branding with our free, curated list of high-impact articles.\",\"Get our Branding reading list delivered right to your inbox.\",\"Free Worksheet: Brand Storytelling\",\"Use this handy exercise as a guide to help you craft a compelling brand story and build a loyal audience through the power of storytelling.\",\"Get the worksheet\",\"Get our free Brand Storytelling Worksheet delivered right to your inbox.\",\"The Complete Guide to Back to School Marketing for Retail Stores\",\"Get an update on this year's back to school marketing trends, compare strategies, and build out your plan with this short guide.\",\"Get the Back to School Marketing Guide delivered right to your inbox.\",\"Free Ebook: Ecommerce Analytics for Beginners\",\"Find out which metrics are the key to establishing and growing your online business. This free guide is the perfect first step in learning about ecommerce analytics.\",\"Get Ecommerce Analytics for Beginners delivered right to your inbox.\",\"subhead\",\"Almost there: please enter your email below to gain instant access.\",\"disclaimer\",\"We'll also send you updates on new educational guides and success stories from the Shopify newsletter. We hate SPAM and promise to keep your email address safe.\",\"argoPlaceholder\",\"0\",\"articleMetaTitle\",\"{{title}} ({{year}})\",{\"_477\":499,\"_500\":501,\"_502\":503,\"_495\":404},\"subscribeBanner\",{\"_477\":409,\"_491\":492,\"_493\":494,\"_495\":414,\"_496\":497,\"_417\":498},\"popularPostsTitle\",\"Most Read\",\"subscribe\",{\"_4\":479,\"_129\":480},\"readMoreLinks\",{\"_477\":478},\"partnersSignup\",{\"_460\":461,\"_462\":463,\"_464\":465,\"_466\":467},\"authorSection\",{\"_398\":443,\"_444\":445,\"_446\":447,\"_448\":449,\"_450\":451,\"_452\":453,\"_454\":455,\"_456\":457,\"_458\":459},\"articleHeader\",{\"_440\":441},\"hero\",{\"_215\":421,\"_357\":422,\"_126\":423,\"_402\":424,\"_425\":426,\"_427\":428,\"_429\":430},{\"_215\":409,\"_357\":410,\"_359\":411,\"_412\":413},{\"_215\":405,\"_406\":407},\"workAnywhere\",{\"_398\":399,\"_400\":401,\"_402\":403},\"textCta\",{\"_394\":395,\"_396\":397},\"rightColSideBannerTitle\",\"The point of sale for every sale.\",\"citation\",{\"_392\":393},\"header\",\"Sources\",\"href\",\"{{deeplinkFreeTrial}}\",\"text\",\"Click here to start selling online now with Shopify\",\"headingHtml\",\"Work from anywhere \u003cbr/\u003e with Shopify\",\"subheadHtml\",\"See our open roles and learn more about our digital by design culture.\",\"button\",{\"_396\":404},\"See open roles\",\"Latest from Shopify\",\"link\",{\"_396\":408},\"See all\",\"Keep up with the latest from Shopify\",\"Subscribe to our blog and get free ecommerce tips, inspiration, and resources delivered directly to your inbox.\",\"Unsubscribe anytime. By entering your email, you agree to receive marketing emails from Shopify.\",\"conversionCta\",{\"_396\":414,\"_415\":416,\"_417\":418},\"Subscribe\",\"emailPlaceholder\",\"Email here\",\"successMessage\",{\"_215\":419,\"_13\":420},\"Thank you for subscription!\",\"Check your email for instructions.\",\"Start selling with Shopify today\",\"Start your free trial with Shopify today—then use these resources to guide you through every step of the process.\",{\"_438\":439},{\"_394\":395,\"_396\":437},\"lightButton\",{\"_394\":435,\"_396\":436},\"treatment\",{\"_215\":433,\"_357\":434},\"treatment_2\",{\"_215\":431,\"_357\":432},\"LET’S MAKE YOUR BUSINESS HAPPEN\",\"Shopify has everything you need to build, run, and grow a business. All you've got to do is start.\",\"The next big entrepreneur: you\",\"Try Shopify for free, and explore all the tools and services you need to start, run, and grow your business.\",\"/\",\"Learn more\",\"Start free trial\",\"alt\",\"My alt.\",\"blogLink\",{\"_396\":442},\"blog\",\"Share article\",\"updatedOn\",\"Updated on\",\"publishedOn\",\"Published on\",\"updatedOnByAuthor\",\"Updated by \u003cwrapper\u003e\u003cname\u003e{{authorName}}\u003c/name\u003e\u003c/wrapper\u003e on \u003cupdatedDate\u003e{{updatedOn}}\u003cupdatedDate/\u003e\",\"byAuthor\",\"by \u003cwrapper\u003e\u003cname\u003e{{authorName}}\u003c/name\u003e\u003c/wrapper\u003e\",\"byAuthor_withLink\",\"by \u003cwrapper\u003e\u003curl\u003e\u003cname\u003e{{authorName}}\u003c/name\u003e\u003c/url\u003e\u003c/wrapper\u003e\",\"reviewed\",\"Reviewed\",\"written\",\"Written\",\"timeToRead\",\"{{minutes}} minute read\",\"service_partner\",{\"_215\":468,\"_217\":476,\"_219\":470},\"app_developer\",{\"_215\":474,\"_217\":475,\"_219\":470},\"affiliate\",{\"_215\":471,\"_217\":472,\"_219\":473},\"general\",{\"_215\":468,\"_217\":469,\"_219\":470},\"Grow your business with the Shopify Partner Program\",\"Whether you offer web design and development services or want to build apps for the Shopify App Store, the Shopify Partner Program will set you up for success. Join for free and access revenue share opportunities, developer preview environments, and educational resources.\",\"Sign up\",\"Become a Shopify Affiliate\",\"Use your voice to inspire entrepreneurship around the world. Whether you’re an existing partner or new to the Shopify Partner Program, apply to become a Shopify Affiliate and earn commission by referring your audience to Shopify.\",\"Apply now\",\"Build apps for Shopify merchants\",\"Whether you want to build apps for the Shopify App Store, offer custom app development services, or are looking for ways to grow your user base, the Shopify Partner Program will set you up for success. Join for free and access educational resources, developer preview environments, and recurring revenue share opportunities.\",\"Whether you offer marketing, customization, or web design and development services, the Shopify Partner Program will set you up for success. Join for free and access revenue share opportunities, tools to grow your business, and a passionate commerce community.\",\"title\",\"Read more\",{\"_155\":490},{\"_481\":482,\"_483\":484,\"_485\":486},\"submit\",\"Get updates\",\"success\",{\"_215\":487,\"_357\":488,\"_219\":489},\"error\",\"Something went wrong, please try again later!\",\"Thanks for subscribing.\",\"You’ll start receiving free tips and resources soon. In the meantime, start building your store with a free trial of Shopify.\",\"Get started\",\"Please enter a valid email address.\",\"description\",\"Get free ecommerce tips, inspiration, and resources delivered directly to your inbox.\",\"placeholder\",\"Enter email\",\"buttonText\",\"hint\",\"By entering your email, you agree to receive marketing emails from Shopify.\",{\"_215\":419,\"_13\":420},\"On this page\",\"bannerTitle\",\"Engineering at Shopify\",\"bannerSubTitle\",\"We’re hiring\",\"subNav\",{\"_477\":506,\"_507\":508,\"_509\":510,\"_511\":512,\"_513\":514},\"Engineering Blog\",\"pageTitle\",\"Menu\",\"overviewText\",\"Homepage\",\"links\",{\"_521\":522,\"_523\":524,\"_525\":526,\"_527\":528,\"_529\":530,\"_531\":532},\"subLinks\",{\"_515\":516,\"_517\":518,\"_519\":520},\"security\",\"Security\",\"data-science-engineering\",\"Data Science Engineering\",\"culture\",\"Culture\",\"ai-machine-learning\",\"AI \u0026 Machine Learning\",\"infrastructure\",\"Infrastructure\",\"mobile\",\"Mobile\",\"developer-tooling\",\"Developer Tooling\",\"latest\",\"Latest\",\"moreTopics\",\"More topics\",\"3\",\"ariaLabels.close\",\"Close\",\"ariaLabels.carousel.name\",\"carousel\",\"ariaLabels.carousel.slide\",\"slide\",\"ariaLabels.carousel.xOfY\",\"{x} of {y}\",\"ariaLabels.footer.regionsNav\",\"Region Navigation\",\"ariaLabels.footer.regionsClose\",\"Close Region Navigation\",\"ariaLabels.footer.newWindow\",\"Opens an external site in a new window\",\"ariaLabels.footer.backToTop\",\"Back to the top\",\"ariaLabels.header.mobileNavMenu\",\"ariaLabels.header.mainNav\",\"Main\",\"ariaLabels.header.secondaryNav\",\"Related pages\",\"ariaLabels.header.skipToContent\",\"Skip to Content\",\"ariaLabels.headerLight.dismissIcon\",\"Dismiss banner\",\"ariaLabels.learnMore\",\"Learn more about {title}\",\"ariaLabels.link.external\",\"External source: \",\"ariaLabels.link.newWindow\",\" (Opens in a new window)\",\"ariaLabels.link.label\",\"{{external}}{{title}}{{newWindow}}\",\"ariaLabels.logoGroup\",\"Logos\",\"ariaLabels.modal.close\",\"Close modal\",\"ariaLabels.modal.pip\",\"Picture in picture\",\"ariaLabels.next\",\"Next\",\"ariaLabels.previous\",\"Previous\",\"ariaLabels.current\",\"Current\",\"ariaLabels.pagination.previous\",\"Previous page\",\"ariaLabels.pagination.next\",\"Next page\",\"ariaLabels.slideshow.xOfY\",\"Go to slide {{x}} of {{y}}\",\"ariaLabels.shopifyLogo\",\"Shopify logo\",\"ariaLabels.shopifyPartnersLogo\",\"Shopify partners logo\",\"ariaLabels.testimonial.controls\",\"Navigate testimonials\",\"ariaLabels.testimonial.plural\",\"Testimonials\",\"ariaLabels.testimonial.next\",\"Next Testimonial\",\"ariaLabels.testimonial.previous\",\"Previous Testimonial\",\"ariaLabels.testimonial.play\",\"Play Testimonial\",\"ariaLabels.testimonial.pause\",\"Pause Testimonial\",\"ariaLabels.videoModal\",\"ariaLabels.video.play\",\"Play video\",\"ariaLabels.video.pause\",\"Pause video\",\"ariaLabels.video.mute\",\"Mute video\",\"ariaLabels.video.unmute\",\"Unmute video\",\"ariaLabels.search.icon\",\"Search icon\",\"ariaLabels.search.label\",\"Search\",\"ariaLabels.search.close\",\"Close search\",\"ariaLabels.search.input\",\"Search input\",\"ariaLabels.search.submit\",\"Submit search\",\"incentivesPromoBanner.retail.subscriptionIncentive\",\"Special offer: get 6 months of POS Pro for {{incentivePrice}}/month\",\"incentivesPromoBanner.retail.spRateIncentive\",\"Get {{rate}}% card rates on up to {{gpvLimit}} USD of in-person sales during your first {{length}} months.\",\"incentivesPromoBanner.retail.spRateIncentiveTerms\",\"Terms apply\",\"cookiesNotice.acceptAllButtonText\",\"Accept all\",\"cookiesNotice.activeConsentContentHtml\",\"We use cookies (and other similar technologies) for many purposes, including to improve your experience on our site and for ads and analytics. Click \\\"Accept all\\\" to accept these uses. Read more in our \u003ca href=\\\"{{legalCookiesPath}}\\\"\u003eCookie Policy\u003c/a\u003e.\",\"cookiesNotice.buttonText\",\"OK\",\"cookiesNotice.contentHtml\",\"Shopify uses cookies to provide necessary site functionality and improve your experience. By using our website, you agree to our \u003ca href=\\\"{{legalPrivacyPath}}\\\"\u003ePrivacy Policy\u003c/a\u003e and our \u003ca href=\\\"{{legalCookiesPath}}\\\"\u003eCookie Policy\u003c/a\u003e.\",\"cookiesNotice.rejectAllButtonText\",\"Reject all\",\"countries.ar\",\"Argentina\",\"countries.at\",\"Austria\",\"countries.au\",\"Australia\",\"countries.be\",\"Belgium\",\"countries.bg\",\"Bulgaria\",\"countries.br\",\"Brazil\",\"countries.by\",\"Belarus\",\"countries.ca\",\"Canada\",\"countries.ch\",\"Switzerland\",\"countries.cl\",\"Chile\",\"countries.cn\",\"China\",\"countries.co\",\"Colombia\",\"countries.cz\",\"Czech Republic\",\"countries.dk\",\"Denmark\",\"countries.en\",\"USA\",\"countries.es\",\"Spain\",\"countries.de\",\"Germany\",\"countries.fi\",\"Finland\",\"countries.fr\",\"France\",\"countries.gb\",\"UK\",\"countries.gr\",\"Greece\",\"countries.hk\",\"Hong Kong SAR\",\"countries.hu\",\"Hungary\",\"countries.id\",\"Indonesia\",\"countries.ie\",\"Ireland\",\"countries.in\",\"India\",\"countries.it\",\"Italy\",\"countries.jp\",\"Japan\",\"countries.kr\",\"Korea\",\"countries.lt\",\"Lithuania\",\"countries.my\",\"Malaysia\",\"countries.mx\",\"Mexico\",\"countries.ng\",\"Nigeria\",\"countries.nl\",\"Netherlands\",\"countries.no\",\"Norway\",\"countries.nz\",\"New Zealand\",\"countries.pe\",\"Peru\",\"countries.ph\",\"Philippines\",\"countries.pl\",\"Poland\",\"countries.pt\",\"Portugal\",\"countries.ro\",\"Romania\",\"countries.se\",\"Sweden\",\"countries.sg\",\"Singapore\",\"countries.th\",\"Thailand\",\"countries.tr\",\"Türkiye\",\"countries.tw\",\"Taiwan\",\"countries.us\",\"countries.vn\",\"Vietnam\",\"countries.za\",\"South Africa\",\"languages.bg\",\"Bulgarian\",\"languages.cs\",\"Czech\",\"languages.da\",\"Danish\",\"languages.de\",\"German\",\"languages.el\",\"Greek\",\"languages.en\",\"English\",\"languages.es\",\"Spanish\",\"languages.fi\",\"Finnish\",\"languages.fr\",\"French\",\"languages.hi\",\"Hindi\",\"languages.hu\",\"Hungarian\",\"languages.id\",\"Indonesian\",\"languages.it\",\"Italian\",\"languages.ja\",\"Japanese\",\"languages.ko\",\"Korean\",\"languages.lt\",\"Lithuanian\",\"languages.nb\",\"Norwegian Bokmål\",\"languages.nl\",\"Dutch\",\"languages.pl\",\"Polish\",\"languages.pt\",\"Portuguese\",\"languages.pt-PT\",\"Portuguese Portugal\",\"languages.ro\",\"Romanian\",\"languages.ru\",\"Russian\",\"languages.sv\",\"Swedish\",\"languages.th\",\"Thai\",\"languages.tr\",\"Turkish\",\"languages.vi\",\"Vietnamese\",\"languages.zh-Hans\",\"Chinese Simplified\",\"languages.zh-Hant\",\"Chinese Traditional\",\"downloadApp.androidAlt\",\"Get the Shopify app on Google Play\",\"downloadApp.androidUrl\",\"{{site, url(path: '/install/android')}}\",\"downloadApp.iosAlt\",\"Download the Shopify app on the Apple App Store\",\"downloadApp.iosUrl\",\"{{site, url(path: '/install/mobile')}}\",\"downloadApp.qrCodeAlt\",\"QR code to download from\",\"downloadApp.qrTitle\",\"Scan to install\",\"downloadposApp.androidAlt\",\"Get the Shopify POS Mobile app on Google Play\",\"downloadposApp.iosAlt\",\"Download the Shopify POS Mobile app on the Apple App Store\",\"downloadposApp.qrCodeAlt\",\"downloadposApp.qrTitle\",\"Scan or click below to install\",\"forms.fields.country.label\",\"Country\",\"forms.fields.country.placeholder\",\"Select one\",\"forms.fields.country.error\",\"Please select a country\",\"globalNav.applyText\",\"Apply for early access\",\"globalNav.applyTextPlain\",\"Apply for access\",\"globalNav.getStarted\",\"globalNav.headerPdfCta\",\"Download document\",\"globalNav.homeUrl\",\"{{home}}\",\"globalNav.loginGetStartedText\",\"Log in to get started\",\"globalNav.loginText\",\"Log in\",\"globalNav.loginUrl\",\"/login\",\"globalNav.signinText\",\"Sign in\",\"globalNav.signupText\",\"globalNav.signupTextStartFree\",\"Start for free\",\"globalNav.signupTextFree\",\"Sign up free\",\"globalNav.signupTextPlain\",\"globalNav.searchText\",\"globalNav.searchPlaceholder\",\"Type something you're looking for\",\"globalNav.searchPlaceholderMobile\",\"globalNav.signUpButtonText\",\"Get in touch\",\"globalNav.sharedBottomBar.shopify\",\"Shopify\",\"globalNav.sharedBottomBar.shopifyDesc\",\"Platform for entrepreneurs \u0026 SMBs\",\"globalNav.sharedBottomBar.plus\",\"Plus\",\"globalNav.sharedBottomBar.plusDesc\",\"A commerce solution for growing digital brands\",\"globalNav.sharedBottomBar.enterprise\",\"Enterprise\",\"globalNav.sharedBottomBar.enterpriseDesc\",\"Solutions for the world’s largest brands\",\"globalNav.contactSalesText\",\"Talk to sales\",\"showLess\",\"Show less\",\"showMore\",\"Show more\",\"home\",\"learnMore\",\"plans.pricingFaqAnswerWithDiscount\",\"We offer a 25% discount for yearly subscriptions if you choose the Basic, Grow, or Advanced plans. If you choose a 3-year Shopify Plus plan, we offer a monthly discount and lower online variable platform fees.\",\"sell.header\",\"Explore your options\",\"sell.title\",\"Apps that help you sell {{vertical}}\",\"sell.subheading\",\"Some popular apps other merchants use\",\"sell.seeRecommendedApps\",\"See more recommended apps\",\"sell.by\",\"By {{partner}}\",\"shopify\",\"pagination.page\",\"Page\",\"signup.buttonText\",\"signup.buttonTextStartFree\",\"signup.buttonTextStartTrial\",\"Start trial\",\"signup.plusButtonText\",\"signup.buttonText_fr\",\"Launch your store\",\"signup.label\",\"Email address\",\"signup.placeholder\",\"Enter your email address\",\"signup.disclaimerHtml\",\"Try Shopify free for {{trialLength}} days, no credit card\u0026nbsp;required. By entering your email, you agree to receive marketing emails\u0026nbsp;from\u0026nbsp;Shopify.\",\"signup.disclaimerNoLengthHtml\",\"No credit card required. By entering your email, you agree to receive marketing emails\u0026nbsp;from\u0026nbsp;Shopify.\",\"signup.testimonialButtonText\",\"Try Shopify free for {{trialLength}} days\",\"signup.freeTrialCtaHtml\",\"Try Shopify for free, and explore all the tools and services you need to start, run, and grow your\u0026nbsp;business.\",\"signup.signupPaidTrialPromo.default_one\",\"Get {{trialLength}} days free then 1 month for {{paidTrialAmount}}.\",\"signup.signupPaidTrialPromo.default_other\",\"Start for free, then get your first {{count}} months for {{paidTrialAmount}}/mo.\",\"signup.signupPaidTrialPromo.disclaimer\",\"By entering your email, you agree to receive marketing emails\u0026nbsp;from\u0026nbsp;Shopify.\",\"signup.signupPaidTrialPromo.disclaimerNoEmail_one\",\"Don’t have a Shopify store? \u003ca href=\\\"{{deeplinkFreeTrial}}\\\" data-component-name=\\\"{{deeplinkFreeTrialName}}\\\"\u003eStart free, then get your first month for {{paidTrialAmount}}.\u003c/a\u003e\",\"signup.signupPaidTrialPromo.disclaimerNoEmail_other\",\"Don’t have a Shopify store? \u003ca href=\\\"{{deeplinkFreeTrial}}\\\" data-component-name=\\\"{{deeplinkFreeTrialName}}\\\"\u003eStart for free, then get your first {{count}} months for {{paidTrialAmount}}/mo.\u003c/a\u003e\",\"social.facebook.text\",\"Facebook\",\"social.twitter.text\",\"Twitter\",\"social.youtube.text\",\"YouTube\",\"social.instagram.text\",\"Instagram\",\"social.tiktok.text\",\"TikTok\",\"social.linkedin.text\",\"LinkedIn\",\"social.pinterest.text\",\"Pinterest\",\"social.email.text\",\"Email\",\"tableOfContents\",\"Table of Contents\",\"waitlistForm.errors.general\",\"Something went wrong, try again later\",\"waitlistForm.errors.emailFormat\",\"Email is formatted incorrectly\",\"waitlistForm.successMessage\",\"Done\",\"waitlistForm.placeholder\",\"waitlistForm.buttonText\",\"Signup\",\"editionsEyebrow.text\",\"Shopify’s Summer ’25 Edition is here\",\"sectionErrorBoundary.message\",\"This content is not loading due to a technical problem\",\"nav.about\",\"About Shopify\",\"nav.academy\",\"Shopify Academy\",\"nav.allFeatures\",\"All features\",\"nav.allProducts\",\"All Products\",\"nav.allProductsDescription\",\"Explore all Shopify products \u0026 features\",\"nav.appStore\",\"Find business apps\",\"nav.appStoreDescription\",\"Shopify app store\",\"nav.b2b\",\"Sell wholesale \u0026 direct\",\"nav.b2bDescription\",\"Business-to-business (B2B)\",\"nav.balance\",\"Balance\",\"nav.banking\",\"Banking\",\"nav.billPay\",\"Bill Pay\",\"nav.blog\",\"Blog\",\"nav.blogEnterprise\",\"Enterprise Blog\",\"nav.blogMerchants\",\"Merchant Blog\",\"nav.blogRetail\",\"Retail Blog\",\"nav.borrowing\",\"Borrowing\",\"nav.branding\",\"Branding\",\"nav.brandingDescriptionV2\",\"Build your brand from scratch\",\"nav.brandingFlyoutDescription\",\"Look professional and help customers connect with your business\",\"nav.build\",\"Build\",\"nav.burst\",\"Free stock photos\",\"nav.businessEncyclopedia\",\"Business encyclopedia\",\"nav.businessFunding\",\"Secure business funding\",\"nav.businessFundingDescription\",\"Shopify Capital\",\"nav.businessGrowth\",\"Business growth\",\"nav.businessGrowthDescription\",\"Scale your business\",\"nav.businessNameGenerator\",\"Business name generator \",\"nav.businessPlanTemplate\",\"Business plan template\",\"nav.businessTypes\",\"Business Types\",\"nav.buyButton\",\"Buy Button\",\"nav.buyButtonDescription\",\"Transform an existing website or blog into an online store\",\"nav.buyButtonSubnav\",\"Explore Buy Button\",\"nav.capital\",\"Capital\",\"nav.capitalLoansAndCashAdvances\",\"Large retailer funding\",\"nav.capitalSmallBusiness\",\"Small business funding\",\"nav.cdiscount\",\"Cdiscount\",\"nav.changelog\",\"Changelog\",\"nav.changelogDescription\",\"Your source for recent updates\",\"nav.checkoutDescription\",\"Provide fast, smooth checkout experiences\",\"nav.checkoutDescriptionV2\",\"World-class checkout\",\"nav.checkoutV2\",\"Check out customers\",\"nav.community\",\"Community\",\"nav.communityEvents\",\"Community Events\",\"nav.compareToPlus\",\"Compare to Plus\",\"nav.compass\",\"Business courses\",\"nav.compassDescription\",\"Learn from proven experts\",\"nav.calculator\",\"Cost calculator\",\"nav.credit\",\"Credit\",\"nav.ctaAlt\",\"Free Trial\",\"nav.docs\",\"Docs\",\"nav.customerInsights\",\"Know your audience\",\"nav.customerInsightsDescription\",\"Gain customer insights\",\"nav.customization\",\"Customization\",\"nav.domainsAndHosting\",\"Own your site domain\",\"nav.domainsAndHostingDescription\",\"Domains \u0026 hosting\",\"nav.dropshipping\",\"Dropshipping\",\"nav.ecommerce\",\"Online store\",\"nav.ecommerceDescription\",\"Online store editor\",\"nav.ecommerceSeo\",\"Ecommerce SEO\",\"nav.ecommerceSeoDescription\",\"Improve your search ranking\",\"nav.ecommerceV2\",\"Create your website\",\"nav.editionsAll\",\"All Editions\",\"nav.editionsAllDescription\",\"Archive of past Shopify Editions\",\"nav.editionsCurrent\",\"Summer ’25 Edition\",\"nav.editionsLast\",\"Winter ’25 Edition\",\"nav.editionsLastDescription\",\"The latest 150+ product updates\",\"nav.emailMarketing\",\"Email marketing\",\"nav.encyclopedia\",\"Encyclopedia\",\"nav.essentialTools\",\"Essential tools\",\"nav.examples\",\"Examples\",\"nav.exchange\",\"Websites for sale\",\"nav.experts\",\"Experts\",\"nav.facebook\",\"Facebook Shops\",\"nav.facebookAds\",\"Facebook Ads\",\"nav.facebookInstagram\",\"Facebook \u0026 Instagram\",\"nav.faq\",\"FAQ\",\"nav.features\",\"Features\",\"nav.financesManagement\",\"Manage your finances \u0026 access funding\",\"nav.financesManagementDescription\",\"Shopify Finance\",\"nav.flow\",\"Ecommerce automation\",\"nav.flowDescription\",\"Shopify Flow\",\"nav.flowV2\",\"Automate your business\",\"nav.forums\",\"Shopify Community\",\"nav.founderStories\",\"Founder stories\",\"nav.founderStoriesDescription\",\"Learn from successful merchants\",\"nav.fraudProtection\",\"Fraud Protection\",\"nav.freeBusinessTools\",\"Explore free business tools\",\"nav.freeBusinessToolsDescription\",\"Tools to run your business\",\"nav.freeTools\",\"Free tools\",\"nav.fulfillment\",\"Fulfillment\",\"nav.fulfillmentDescription\",\"Shopify Fulfillment Network\",\"nav.fulfillmentV2\",\"Outsource fulfillment \u0026 returns\",\"nav.getStarted\",\"nav.getInTouch\",\"nav.google\",\"Google\",\"nav.googleSmart\",\"nav.googleYoutube\",\"Google \u0026 Youtube\",\"nav.guides\",\"Guides\",\"nav.hardware\",\"Hardware\",\"nav.hardwareStore\",\"Hardware store\",\"nav.helpAndSupport\",\"Help and support\",\"nav.helpAndSupportDescription\",\"Get 24/7 support\",\"nav.helpCenter\",\"Help Center\",\"nav.howToGuides\",\"How-to guides\",\"nav.howToGuidesDescription\",\"Read in-depth business guides\",\"nav.impressumGenerator\",\"Impressum-Generator\",\"nav.inbox\",\"Business chat\",\"nav.inboxDescription\",\"Turn browsers into buyers\",\"nav.inboxDescriptionV2\",\"Shopify Inbox\",\"nav.inboxV2\",\"Chat with customers\",\"nav.instagram\",\"nav.installments\",\"Installments\",\"nav.internationalSales\",\"International sales\",\"nav.internationalSalesDescription\",\"Sell globally\",\"nav.inventoryOrderManagement\",\"Manage your stock \u0026 orders\",\"nav.inventoryOrderManagementDescription\",\"Inventory \u0026 order management\",\"nav.joinNow\",\"Join Now\",\"nav.learn\",\"Learn\",\"nav.lending\",\"Lending\",\"nav.logoMaker\",\"Logo maker\",\"nav.manage\",\"Manage\",\"nav.manageEverything\",\"Manage everything\",\"nav.manageYourBusiness\",\"Manage your business\",\"nav.manageYourBusinessDescription\",\"Track sales, orders \u0026 analytics\",\"nav.market\",\"Market\",\"nav.marketDescription\",\"Market your business\",\"nav.marketDescriptionV2\",\"Reach \u0026 retain customers\",\"nav.marketing\",\"Marketing\",\"nav.marketingAutomation\",\"Marketing automation\",\"nav.marketingDescription\",\"Build a marketing plan\",\"nav.marketingTools\",\"Marketing tools\",\"nav.marketingToolsDescription\",\"Ads, email campaigns, and more\",\"nav.marketplaces\",\"Online marketplaces\",\"nav.markets\",\"International commerce\",\"nav.marketsDescription\",\"Reach buyers in new markets with international selling tools\",\"nav.measureYourPerformance\",\"Measure your performance\",\"nav.measureYourPerformanceDescription\",\"Analytics and Reporting\",\"nav.midMarket\",\"Mid-market\",\"nav.migrateToShopify\",\"Migrate to Shopify\",\"nav.migrateToShopifyDescription\",\"Compare to other platforms\",\"nav.mobileApp\",\"Mobile app\",\"nav.mobileAppDescription\",\"Respond in real time\",\"nav.moneyManagement\",\"Get paid faster\",\"nav.moneyManagementDescription\",\"Shopify Balance\",\"nav.more\",\"More\",\"nav.newsroom\",\"Newsroom\",\"nav.newsroomDescription\",\"All company news and press releases\",\"nav.onlineFlyoutDescription\",\"Find a domain, explore stock images, and amplify your brand\",\"nav.onlinePresence\",\"Online presence\",\"nav.onlineStoreDescription\",\"Sell online with an ecommerce website\",\"nav.omnichannel\",\"Omnichannel selling\",\"nav.orderManagementAndFulfillment\",\"Order management and delivery\",\"nav.overview\",\"Overview\",\"nav.partners\",\"Partners\",\"nav.payments\",\"Payment processing\",\"nav.paymentsDescription\",\"Set up forms of payment\",\"nav.paymentsOverview\",\"nav.paymentsV2\",\"Accept online payments\",\"nav.pillarDropdownCta\",\"nav.ping\",\"Shopify Ping\",\"nav.plus\",\"nav.plusPricing\",\"Plus Pricing\",\"nav.podcasts\",\"Podcasts\",\"nav.pointOfSaleDescription\",\"Point of Sale (POS)\",\"nav.pointOfSaleV2\",\"Sell in person\",\"nav.popularTopics\",\"Popular topics\",\"nav.pos\",\"Shopify POS\",\"nav.posPricing\",\"POS Pricing\",\"nav.posSystemSmallBusiness\",\"Small business POS\",\"nav.posMultiStore\",\"Multi-store POS\",\"nav.posInventorySystem\",\"POS inventory system\",\"nav.posAndroid\",\"Android POS\",\"nav.posIpad\",\"iPad POS\",\"nav.posApp\",\"POS App\",\"nav.posSoftware\",\"POS Software\",\"nav.pricingOverview\",\"Pricing overview\",\"nav.productSourcing\",\"Product sourcing\",\"nav.productSourcingDescription\",\"Find products to sell\",\"nav.productsToSell\",\"Products to sell\",\"nav.qrCodeGenerator\",\"QR code generator\",\"nav.rakuten\",\"Rakuten\",\"nav.research\",\"Research\",\"nav.resources\",\"Resources\",\"nav.retail\",\"Retail POS\",\"nav.retailDescription\",\"Sell at retail locations, pop-ups, and beyond\",\"nav.salesChannels\",\"Sales channels\",\"nav.salesChannelsDescription\",\"Reach millions of shoppers and boost sales\",\"nav.salesChannelsDescriptionV2\",\"Channels for social \u0026 marketplaces\",\"nav.salesChannelsV2\",\"Sell across channels\",\"nav.segmentation\",\"Customer groups\",\"nav.sell\",\"Sell\",\"nav.sellEverywhere\",\"Sell everywhere\",\"nav.sellOnline\",\"Sell online\",\"nav.sellOnlineDescription\",\"Grow your business online\",\"nav.sellYourProducts\",\"Sell your products\",\"nav.sellYourProductsDescription\",\"Sell online or in person\",\"nav.shippingDescription\",\"Fulfill orders faster\",\"nav.shippingDescriptionV2\",\"Shopify Shipping\",\"nav.shippingV2\",\"Ship orders faster\",\"nav.inventoryDescription\",\"Inventory management\",\"nav.shop\",\"Shop\",\"nav.shopPay\",\"Shop Pay\",\"nav.shopifyBlog\",\"Shopify blog\",\"nav.shopifyBlogDescription\",\"Business strategy tips\",\"nav.shopifyCaseStudies\",\"Case Studies\",\"nav.shopifyCaseStudiesDescription\",\"nav.shopifyComparison\",\"Shopify comparison\",\"nav.shopifyComparisonDescription\",\"Comparison with other platforms\",\"nav.shopifyMigration\",\"nav.shopifyMigrationDescription\",\"Migration checklists, guides and tools\",\"nav.shopifyDevelopers\",\"Shopify Developers\",\"nav.shopifyDevelopersDescription\",\"Build with Shopify's powerful APIs\",\"nav.shopifyEditionsDescription\",\"New, innovative Shopify products\",\"nav.shopifyEmail\",\"Nurture customers\",\"nav.shopifyEmailDescription\",\"Shopify Messaging\",\"nav.shopifyFinance\",\"nav.shopifyGold\",\"nav.shopifyOnlineStore\",\"Shopify Online store\",\"nav.shopifyPlus\",\"nav.shopifyPlusDescription\",\"nav.shopifyPointOfSale\",\"Shopify Point of Sale\",\"nav.shopifyVsBigCommerce\",\"Shopify vs. BigCommerce\",\"nav.shopifyVsSalesforce\",\"Shopify vs. Salesforce\",\"nav.shopifyVsSquare\",\"Shopify vs. Square\",\"nav.signup\",\"nav.social\",\"Social media\",\"nav.socialDescription\",\"Social media integrations\",\"nav.socialMediaStrategy\",\"Social media strategy\",\"nav.socialMediaStrategyDescription\",\"Turn social into sales\",\"nav.socialV2\",\"Market across social\",\"nav.solutions\",\"Solutions\",\"nav.staffManagement\",\"Staff management\",\"nav.start\",\"Start\",\"nav.startYourBusiness\",\"Start your business\",\"nav.startYourBusinessDescription\",\"Build your brand\",\"nav.stockPhotography\",\"Stock photography\",\"nav.storeSetup\",\"Store set up\",\"nav.storeSetupDescription\",\"Use Shopify’s powerful features to start selling\",\"nav.storeThemes\",\"Store themes\",\"nav.storeThemesDescription\",\"Customize your store\",\"nav.successStories\",\"Success stories\",\"nav.talkToSales\",\"nav.tax\",\"Tax\",\"nav.termLoans\",\"Term Loans\",\"nav.themeStore\",\"Theme store\",\"nav.tiktok\",\"nav.upgradeToPlus\",\"Upgrade to Plus\",\"nav.videos\",\"Videos\",\"nav.walmart\",\"Walmart Marketplace\",\"nav.waysToSell\",\"Ways to sell\",\"nav.webAddress\",\"Domain name\",\"nav.whatIsShopify\",\"What is Shopify?\",\"nav.whatIsShopifyDescription\",\"How our commerce platform works\",\"nav.whatsNew\",\"What’s new\",\"nav.youtube\",\"nav.____newNavKeysBelowDoNotReorder____\",\"nav.advertisingCampaigns\",\"Advertising \u0026 Campaigns\",\"nav.ai\",\"AI\",\"nav.analytics\",\"Analytics\",\"nav.b2b2\",\"B2B\",\"nav.back\",\"Back\",\"nav.buildYourWebsite\",\"Build your website\",\"nav.checkout\",\"Checkout\",\"nav.customizeExtendShopify\",\"Customize \u0026 extend Shopify\",\"nav.discounts\",\"Discounts\",\"nav.domains\",\"Domains\",\"nav.editions\",\"Editions\",\"nav.emailCustomerChat\",\"Email \u0026 Customer Chat\",\"nav.enterprise\",\"nav.financesFunding\",\"Finances \u0026 Funding\",\"nav.getPaid\",\"Get paid\",\"nav.global\",\"Global\",\"nav.latestUpdates\",\"Latest updates\",\"nav.latestUpdates1\",\"New store design system\",\"nav.latestUpdates2\",\"Deep insights with Sidekick\",\"nav.latestUpdates3\",\"Next-gen dev platform\",\"nav.login\",\"nav.marketingAnalytics\",\"Marketing \u0026 analytics\",\"nav.nonStopInnovation\",\"Non-stop innovation\",\"nav.nonStopInnovationDesc\",\"Every six months, Shopify rolls out hundreds of features and upgrades.\",\"nav.nonStopInnovationDescSummer\",\"150+ updates to Shopify, twice a year.\",\"nav.online\",\"Online\",\"nav.ordersInventory\",\"Orders \u0026 Inventory\",\"nav.payments2\",\"Payments\",\"nav.pointOfSale\",\"Point of Sale\",\"nav.pricing\",\"Pricing\",\"nav.products\",\"Products\",\"nav.runYourBusiness\",\"Run your business\",\"nav.sellAnywhere\",\"Sell anywhere\",\"nav.shipping\",\"Shipping\",\"nav.shopifyAppStore\",\"Shopify App Store\",\"nav.shopifyAppStoreDesc\",\"Largest commerce ecosystem\",\"nav.shopifyDevDesc\",\"Dev docs, CLI, and more\",\"nav.shopifyEditions\",\"Shopify Editions\",\"nav.socialMarketplaces\",\"Social \u0026 Marketplaces\",\"nav.startFreeTrial\",\"nav.summerEdition\",\"Summer Edition\",\"nav.taxes\",\"Taxes\",\"nav.themes\",\"Themes\",\"nav.websiteBuilder\",\"Website Builder\",\"nav.winterEdition\",\"Winter Edition\",\"nav.workflowAutomation\",\"Workflow Automation\",\"footer.about\",\"About\",\"footer.aboutShopify\",\"footer.accessibility\",\"Accessibility\",\"footer.affiliateProgram\",\"Affiliate Program\",\"footer.apiDocs\",\"API Documentation\",\"footer.appDemo\",\"App Demo\",\"footer.appDeveloperProgram\",\"App Developers\",\"footer.ar\",\"Shopify AR\",\"footer.blogTopics\",\"Blog Topics\",\"footer.brand\",\"Brand\",\"footer.buildBlack\",\"Build Black\",\"footer.buildNative\",\"Build Native\",\"footer.businessNameGenerator\",\"Business Name Generator \",\"footer.burst\",\"Free Stock Photos\",\"footer.buyButton\",\"footer.capital\",\"footer.company\",\"Company\",\"footer.companyInfo\",\"Company Info\",\"footer.contact\",\"Contact\",\"footer.contactShopify\",\"Contact Shopify\",\"footer.countrySelect\",\"Change your country or region.\",\"footer.countrySelectHeading\",\"Country/region\",\"footer.regionLanguageSelectLong\",\"Choose a region \u0026 language\",\"footer.regionLanguageSelectShort\",\"Choose a region\",\"footer.devDegree\",\"Dev Degree\",\"footer.developers\",\"Developers\",\"footer.documentation\",\"Shopify Help Center\",\"footer.domainNames\",\"Domain Names\",\"footer.domains\",\"footer.dropshipping\",\"Dropshipping Business\",\"footer.ecommerce\",\"Online Store\",\"footer.ecommerceHosting\",\"Ecommerce Hosting\",\"footer.ecommerceSoftware\",\"Ecommerce Software\",\"footer.economicGrowth\",\"Economic Growth\",\"footer.email\",\"footer.examples\",\"footer.experts\",\"Shopify Partners\",\"footer.featureTour\",\"footer.features\",\"footer.forums\",\"footer.fulfillment\",\"footer.gaming\",\"Gaming\",\"footer.globalImpact\",\"Global Impact\",\"footer.hardware\",\"footer.heading\",\"More resources\",\"footer.hireAnExpert\",\"Hire a Partner\",\"footer.leadership\",\"Leadership\",\"footer.logoGenerator\",\"Logo Maker\",\"footer.managePrivacy\",\"Manage Cookies\",\"footer.merchantSupport\",\"Merchant Support\",\"footer.mobileCommerce\",\"Mobile Commerce\",\"footer.onlineStore\",\"Ecommerce Website\",\"footer.onlineStoreBuilder\",\"Online Store Builder\",\"footer.partnerProgram\",\"Partner Program\",\"footer.payments\",\"footer.phoneNumber\",\"1-888-329-0139\",\"footer.platform\",\"Platform\",\"footer.pointOfSale\",\"footer.posFeatures\",\"footer.posSoftware\",\"footer.pressAndMedia\",\"Press and Media\",\"footer.pressReleases\",\"Press Releases\",\"footer.privacyChoices\",\"Your Privacy Choices\",\"footer.products\",\"footer.research\",\"footer.resources\",\"Support\",\"footer.sellInStore\",\"footer.sellOnline\",\"Sell Online\",\"footer.sellOnlineTour\",\"Online Retail\",\"footer.setUp\",\"Setup\",\"footer.sfn\",\"footer.shipping\",\"footer.shop\",\"footer.shopPay\",\"footer.shopify\",\"footer.shopifyAcademy\",\"footer.shopifyEvents\",\"Shopify Events\",\"footer.shopifyExperts\",\"footer.shopifyForEnterprise\",\"Shopify for Enterprise\",\"footer.shopifyGold\",\"footer.shopifyLite\",\"Shopify Lite\",\"footer.shopifyPlus\",\"Shopify Plus\",\"footer.shoppingCart\",\"Shopping Cart\",\"footer.social\",\"Social\",\"footer.socialImpact\",\"Social Impact\",\"footer.solutions\",\"footer.storeDesign\",\"footer.storeThemes\",\"Store Themes\",\"footer.support\",\"24/7 support\",\"footer.supportLimited\",\"Customer Support\",\"footer.themeSupport\",\"Theme Support\",\"footer.themes\",\"footer.tools\",\"Free Tools\",\"footer.topics\",\"Topics\",\"footer.trustSealsAccessibilityText\",\"Use Shopify with confidence. Our platform has been assessed and certified by:\",\"footer.video\",\"Video\",\"footer.videoTutorials\",\"Video Tutorials\",\"footer.____newFooterKeysBelowDoNotReorder____\",\"footer.affiliates\",\"Affiliates\",\"footer.appStore\",\"App Store\",\"footer.blog\",\"footer.careers\",\"Careers\",\"footer.changelog\",\"footer.communityForum\",\"Community Forum\",\"footer.compareShopify\",\"Compare Shopify\",\"footer.cookieSettings\",\"Cookie settings\",\"footer.courses\",\"Courses\",\"footer.developerDocs\",\"Developer docs\",\"footer.ecosystem\",\"Ecosystem\",\"footer.freeTools\",\"footer.guides\",\"footer.helpCenter\",\"footer.hireAPartner\",\"Hire a partner\",\"footer.investors\",\"Investors\",\"footer.legal\",\"Legal\",\"footer.newsroom\",\"footer.partners\",\"footer.privacyPolicy\",\"Privacy policy\",\"footer.resources2\",\"footer.serviceStatus\",\"Service status\",\"footer.shopifyEditions\",\"footer.sitemap\",\"Sitemap\",\"footer.support2\",\"footer.sustainability\",\"Sustainability\",\"footer.termsOfService\",\"Terms of service\",\"footer.themeStore\",\"Theme Store\",\"footer.whatIsShopify\",\"brochureBot.header\",\"Shopify chat\",\"brochureBot.askAnything\",\"Ask anything\",\"brochureBot.resetChat\",\"Reset chat\",\"brochureBot.plusWelcomeQuestions.heading\",\"Welcome to Shopify.\",\"brochureBot.plusWelcomeQuestions.subhead\",\"How can I help?\",\"brochureBot.plusWelcomeQuestions.questions.0.question\",\"Get a demo\",\"brochureBot.plusWelcomeQuestions.questions.0.answer\",\"brochureBot.plusWelcomeQuestions.questions.1.question\",\"brochureBot.plusWelcomeQuestions.questions.1.answer\",\"brochureBot.plusWelcomeQuestions.questions.2.question\",\"Upgrade to Shopify Plus\",\"brochureBot.plusWelcomeQuestions.questions.2.answer\",\"How do I upgrade to Shopify Plus?\",\"brochureBot.plusWelcomeQuestions.questions.3.question\",\"Get pricing info\",\"brochureBot.plusWelcomeQuestions.questions.3.answer\",\"I'd like to get pricing info\",\"brochureBot.plusWelcomeQuestions.questions.4.question\",\"Contact Shopify support today\",\"brochureBot.plusWelcomeQuestions.questions.4.answer\",\"I need help with my Shopify store\",\"brochureBot.retailWelcomeQuestions.heading\",\"brochureBot.retailWelcomeQuestions.subhead\",\"brochureBot.retailWelcomeQuestions.questions.0.question\",\"Get Shopify POS for my business\",\"brochureBot.retailWelcomeQuestions.questions.0.answer\",\"brochureBot.retailWelcomeQuestions.questions.1.question\",\"Speak to a Retail Sales Expert\",\"brochureBot.retailWelcomeQuestions.questions.1.answer\",\"brochureBot.retailWelcomeQuestions.questions.2.question\",\"Learn about POS features\",\"brochureBot.retailWelcomeQuestions.questions.2.answer\",\"brochureBot.retailWelcomeQuestions.questions.3.question\",\"Contact Retail support\",\"brochureBot.retailWelcomeQuestions.questions.3.answer\",\"brochureBot.disclaimer\",\"AI-generated answers may contain errors. Always verify info.\",\"brochureBot.preChat\",\"Considering Shopify?\",\"brochureBot.openChat\",\"Ask our AI-powered chat\",\"brochureBot.chatWelcomeMessage\",\"Hey 👋🏻! Thanks for visiting Shopify. What brings you by today?\",\"brochureBot.bookACall.scheduleMeeting\",\"Schedule meeting\",\"brochureBot.bookACall.scheduleMeetingDescription\",\"Schedule a 15 minute meeting with {{firstName}} {{lastName}}\",\"brochureBot.bookACall.changeTime\",\"Change time\",\"brochureBot.bookACall.noneOfTheseWork\",\"None of these work\",\"brochureBot.bookACall.next\",\"brochureBot.bookACall.preChatButton.title\",\"Book a call\",\"brochureBot.bookACall.preChatButton.description\",\"Schedule a 15 minute meeting.\",{\"_1801\":665,\"_1802\":43,\"_1803\":1804},\"label\",\"countryCode\",\"languages\",[1805],{\"_1801\":744,\"_1806\":45,\"_1807\":97,\"_1808\":97,\"_1809\":1810,\"_394\":34,\"_1811\":59,\"_1812\":1810},\"pathPrefix\",\"hreflang\",\"languageCode\",\"published\",true,\"isVirtual\",\"isActive\",\"locale\",\"features\",[],\"supportsVirtualEnglish\",\"preferredLanguage\",\"inactive\",\"pathTranslations\",{},\"blogTranslations\",\"publishedPaths\",{\"_1824\":1810,\"_1825\":1810,\"_1826\":1810,\"_435\":1810,\"_1827\":1810,\"_1828\":1810,\"_1829\":1810,\"_1830\":1810,\"_1831\":1810,\"_1832\":1810,\"_1833\":1810,\"_1834\":1810,\"_1835\":1810,\"_1836\":1810},\"/latest\",\"/topics\",\"/search\",\"/blog.atom\",\"/robots.txt\",\"/:article\",\"/*\",\"/topics/sitemap.xml\",\"/topics/:topic\",\"/sitemap.xml\",\"/authors/sitemap.xml\",\"/authors/:author\",\"/404\",{\"_1855\":406,\"_1856\":1857,\"_1807\":1891,\"_394\":34},{\"_1855\":406,\"_1856\":1857,\"_1807\":1890,\"_394\":34},{\"_1855\":406,\"_1856\":1857,\"_1807\":1888,\"_394\":1889},{\"_1855\":406,\"_1856\":1857,\"_1807\":1886,\"_394\":1887},{\"_1855\":406,\"_1856\":1857,\"_1807\":1884,\"_394\":1885},{\"_1855\":406,\"_1856\":1857,\"_1807\":1882,\"_394\":1883},{\"_1855\":406,\"_1856\":1857,\"_1807\":1880,\"_394\":1881},{\"_1855\":406,\"_1856\":1857,\"_1807\":1878,\"_394\":1879},{\"_1855\":406,\"_1856\":1857,\"_1807\":1876,\"_394\":1877},{\"_1855\":406,\"_1856\":1857,\"_1807\":1874,\"_394\":1875},{\"_1855\":406,\"_1856\":1857,\"_1807\":1872,\"_394\":1873},{\"_1855\":406,\"_1856\":1857,\"_1807\":1870,\"_394\":1871},{\"_1855\":406,\"_1856\":1857,\"_1807\":1868,\"_394\":1869},{\"_1855\":406,\"_1856\":1857,\"_1807\":1866,\"_394\":1867},{\"_1855\":406,\"_1856\":1857,\"_1807\":1864,\"_394\":1865},{\"_1855\":406,\"_1856\":1857,\"_1807\":1862,\"_394\":1863},{\"_1855\":406,\"_1856\":1857,\"_1807\":1860,\"_394\":1861},{\"_1855\":406,\"_1856\":1857,\"_1807\":1858,\"_394\":1859},\"tagName\",\"rel\",\"alternate\",\"en-ZA\",\"https://shopify.engineering/za/capacity-planning-shopify\",\"en-GB\",\"https://shopify.engineering/uk/capacity-planning-shopify\",\"en-SG\",\"https://shopify.engineering/sg/capacity-planning-shopify\",\"en-PK\",\"https://shopify.engineering/pk/capacity-planning-shopify\",\"en-PH\",\"https://shopify.engineering/ph/capacity-planning-shopify\",\"en-NZ\",\"https://shopify.engineering/nz/capacity-planning-shopify\",\"en-NG\",\"https://shopify.engineering/ng/capacity-planning-shopify\",\"en-MY\",\"https://shopify.engineering/my/capacity-planning-shopify\",\"en-IN\",\"https://shopify.engineering/in/capacity-planning-shopify\",\"en-IL\",\"https://shopify.engineering/il/capacity-planning-shopify\",\"en-IE\",\"https://shopify.engineering/ie/capacity-planning-shopify\",\"en-ID\",\"https://shopify.engineering/id/capacity-planning-shopify\",\"en-HK\",\"https://shopify.engineering/hk-en/capacity-planning-shopify\",\"en-CA\",\"https://shopify.engineering/ca/capacity-planning-shopify\",\"en-AU\",\"https://shopify.engineering/au/capacity-planning-shopify\",\"en-AE\",\"https://shopify.engineering/ae/capacity-planning-shopify\",\"en-US\",\"x-default\",{\"_477\":1920,\"_1897\":1921,\"_56\":1922,\"_1900\":1923,\"_1902\":-5,\"_1903\":1924},{\"_477\":1914,\"_1897\":1915,\"_56\":1916,\"_1900\":1917,\"_1902\":-5,\"_1903\":1918},{\"_477\":1908,\"_1897\":1909,\"_56\":1910,\"_1900\":1911,\"_1902\":-5,\"_1903\":1912},{\"_477\":1896,\"_1897\":1898,\"_56\":1899,\"_1900\":1901,\"_1902\":-5,\"_1903\":1904},\"The Engineering Story Behind Flex Comp\",\"tags\",[1905,1906,1907],\"building-flex-comp\",\"imageUrl\",\"https://cdn.shopify.com/s/files/1/0779/4361/articles/ShopifyEng_BlogIllustrations_220927_72ppi_03_BuildingShopifysNewFlexCompSystem.jpg?v=1666044315\",\"imageAltText\",\"modifiedAt\",\"2022-10-05\",\"Development\",\"Hero\",\"Popular\",\"Shopify’s platform is the Web platform\",[1913,1907],\"shopifys-platform-is-the-web-platform\",\"https://cdn.shopify.com/s/files/1/0779/4361/articles/remix-app-bridge.png?v=1690230786\",\"2023-07-26\",\"Apps\",\"Building a ShopifyQL Code Editor\",[528,1907,1919],\"building-a-shopifyql-code-editor\",\"https://cdn.shopify.com/s/files/1/0779/4361/articles/ShopifyEng_BlogIllustrations_210719_72ppi_05_FiveStepsforBuildingMachineLearning_106d101b-f6f5-4b55-a648-1b6b89f669a5.jpg?v=1770410321\",\"2023-09-11\",\"validated\",\"Introducing Ruvy\",[1905,1907],\"introducing-ruvy\",\"https://cdn.shopify.com/s/files/1/0779/4361/articles/ShopifyEng_BlogIllustrations_211008_72ppi_01_YJIT-BuildingaNewJITCompilerforCRuby_0a00a8cf-3951-4556-9b2c-3f88e9de76ff.jpg?v=1697134143\",\"2023-10-18\",\"topSectionImages\",[1939,1940,1941],{\"_113\":114,\"_115\":116,\"_117\":118,\"_119\":1933,\"_1934\":1935,\"_121\":1936},{\"_21\":1930},{},{\"_1931\":1932},\"subscriptionId\",\"DE84EF61-2A02-4778-8807-F01B108DE974\",{\"_126\":1938},\"rightColSideBannerImg\",\"https://cdn.shopify.com/b/shopify-brochure2-assets/c8790c0f3c1fa91ccc845e45ce067bbe.png\",{\"_123\":1937},{\"_97\":125},{\"_97\":128},{\"_1942\":1945},{\"_1942\":1944},{\"_1942\":1943},\"src\",\"https://cdn.shopify.com/b/shopify-brochure2-assets/16db235a9390238e6f9b8fd2a5c29680.png?originalWidth=1005\u0026originalHeight=1288\",\"https://cdn.shopify.com/b/shopify-brochure2-assets/8262a99b5702f964162106b94a23ad2d.png?originalWidth=1005\u0026originalHeight=1288\",\"https://cdn.shopify.com/b/shopify-brochure2-assets/2ecdaa09da44408d3c2a2b9cba3a2c07.png?originalWidth=1005\u0026originalHeight=1288\",\"__typename\",\"Article\",\"authorV2\",{\"_1946\":1990,\"_1973\":1974,\"_155\":45},\"id\",\"gid://shopify/Article/28345532472\",\"capacity-planning-shopify\",\"Capacity Planning at Scale\",\"publishedAt\",\"2020-12-03T18:00:01Z\",{\"_1946\":1984,\"_33\":24,\"_1985\":1964,\"_1986\":1987,\"_1988\":1989},[524],\"\u003chtml\u003e\u003chead\u003e\u003c/head\u003e\u003cbody\u003e\u003cp style=\\\"text-align: right;\\\"\u003e\u003cstrong\u003eBy Kathryn Tang and Kir Shatrov\u003c/strong\u003e\u003c/p\u003e\\n\u003cp\u003eThe fourth Thursday in November is Thanksgiving in the United States. The day after, Black Friday (coined in 1961), is the first day of the Christmas shopping season and since 2005 it’s the busiest shopping day of the year in North America. Cyber Monday is a more recent development. Getting its name in 2005, it refers to the Monday after the Thanksgiving weekend where retailers focus on sales offered online. At Shopify, we call the weekend including Black Friday and Cyber Monday \u003cb\u003eBFCM\u003c/b\u003e.\u003c/p\u003e\\n\u003cp\u003eFrom the engineering team’s point of view, every BFCM challenges the platform and all the things we’ve shipped throughout the year:\u003c/p\u003e\\n\u003cul\u003e\\n\u003cli\u003eWould our clusters handle two times the number of virtual machines?\u0026nbsp;\u003c/li\u003e\\n\u003cli\u003eWould we hit some sort of limitation on the new network design?\u0026nbsp;\u003c/li\u003e\\n\u003cli\u003eWould the new logging pipeline handle such an increase in traffic?\u0026nbsp;\u003c/li\u003e\\n\u003cli\u003eWhat’s going to be the next scalability bottleneck that we hit?\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003cp\u003eThe other challenge is planning the capacity. We need to understand the magnitude of traffic ahead of us, and how many resources like CPUs and storage we’ll need to handle BFCM sales. On top of that, we need to have enough room in case of something unexpected, and we need to perform a regional failover.\u003c/p\u003e\\n\u003cp\u003eSince 2017, we’ve \u003ca href=\\\"https://shopify.engineering/shopify-infrastructure-collaboration-with-google\\\" target=\\\"_blank\\\" title=\\\"Shopify’s Infrastructure Collaboration with Google\\\" rel=\\\"noopener noreferrer\\\"\u003epartnered with Google Cloud Platform\u003c/a\u003e (GCP) as our main vendor for the cloud. Over these years, we’ve worked closely with their team on our capacity models, and prior to every BFCM that collaboration gets even closer.\u003c/p\u003e\\n\u003cp\u003eIn this post, we’ll cover our approaches to capacity planning, and how we rolled it out across the org and to dozens of teams. We’ll also share how we validated our capacity plans with scalability tests to make sure they work.\u003c/p\u003e\\n\u003ch1\u003eCapacity Planning\u0026nbsp;\u003c/h1\u003e\\n\u003cp\u003eOur Google Cloud resource needs depend on how much traffic our merchants see during BFCM. We worked with our data scientists to forecast traffic levels and set those levels as a bar for our platform to scale to. Additionally, we looked into historical numbers, applied a safety margin, and projected how many buyers would check out or view online stores.\u003c/p\u003e\\n\u003cfigure\u003e\u003cimg src=\\\"https://cdn.shopify.com/s/files/1/0779/4361/files/GCP-Projects-Capacity-planning.jpg?v=1607013216\\\" alt=\\\"A list of GCP projects for resource planning. The list includes items like memcache, Kafka, MySQL, etc\\\"\u003e\\n\u003cfigcaption\u003eA list of GCP projects for resource planning.\u003c/figcaption\u003e\\n\u003c/figure\u003e\\n\u003cp\u003eWe created a master resourcing plan for our Google Cloud implementation and estimated how things like CPUs and storage would scale to BFCM traffic levels. Owners for our top 10 or so resource areas were tasked to estimate what they needed for BFCM. These estimates were detailed breakdowns of the machine types, geographic locations, and quantities of resources like CPUs. We also added buffers to our overall estimates to allow flexibility to change our resourcing needs, move machines across projects, or failover traffic to different regions if we needed to. What also helps is that we partition each component into a separate GCP project, which makes it a lot easier to think of quotas per every project.\u003c/p\u003e\\n\u003cfigure\u003e\u003cimg src=\\\"https://cdn.shopify.com/s/files/1/0779/4361/files/2020BFCM-Traffice-Scenarios.jpg?v=1607014152\\\" alt=\\\"A line graph showing the BFCM traffic forecasts over time. 4 different scenarios are shown in blue, red, yellow and green. The black line shows existing traffic patterns\\\"\u003e\\n\u003cfigcaption\u003eA line graph showing the BFCM traffic forecasts over time\u003c/figcaption\u003e\\n\u003c/figure\u003e\\n\u003cp\u003e2020 is an exceptionally difficult year to plan for. Normally, we’d look at BFCM trends from years prior and predict BFCM traffic with a fairly high level of confidence. This year, COVID-19 lockdowns drove a rapid shift to selling online this spring, and we didn't know what to expect. Would we see a massive increase in online traffic this BFCM, or a global economic depression where consumers stopped buying much at all? To manage heightened uncertainty, we forecasted multiple scenarios and their respective needs for our cloud deployment.\u003c/p\u003e\\n\u003cp\u003eFrom an investment perspective, planning for the largest scale scenario means spending a lot of money very quickly to handle sales that might not happen. Alternatively, not deploying enough machines means having too little computing power and putting our merchant storefronts at risk of outages. It was absolutely vital to avoid anything that would put our merchants at risk of downtime. We decided to scale to our more aggressive growth scenarios to ensure our platform is stable regardless of what happens. We’re transparent with our partners, finance teams, and internal teams about how we thought through these scenarios which helps them make their own operating decisions.\u003c/p\u003e\\n\u003ch1\u003eScalability Testing\u003c/h1\u003e\\n\u003cp\u003eA sheet with a capacity plan is just a starting point. Once we start scaling to projected numbers, there’s a high chance that we’ll hit limits throughout our tech stack that need resolving. In a complex system, there’s always a limit like:\u003c/p\u003e\\n\u003cul\u003e\\n\u003cli\u003ethe number of VMs in a network\u003c/li\u003e\\n\u003cli\u003ethe number of packets that a busy Memcached server can accept\u0026nbsp;\u003c/li\u003e\\n\u003cli\u003ethe number of MB/s your logging pipeline can handle.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003cp\u003eHistorically, every BFCM brought us some scalability surprises, and what’s worse, we’d only notice them when fully scaled prior to BFCM. That left too little time to come up with mitigation plans.\u003c/p\u003e\\n\u003cp\u003eBack in 2018, we decided that a “faux” BFCM in the middle of the year would increase our resilience as an organization and push us to find unknowns that we’d otherwise only discover during the real thing. As we started doing that, it allowed us to find problems at scale more often and created that mental muscle of preparing for critical events and finding unknowns. If you’re exercising and something feels hard, you train more and eventually your muscles get better. Shopify treats BFCM the same way.\u003c/p\u003e\\n\u003cp\u003eWe’ve started the practice of regular scale-up testing at Shopify, and of course we made sure to come up with fun names for each. We’ve had Mayday (2019), Spooky scale-up (2019), and Oktoberfest scale-up (2020). Another fun fact is that our Waterloo teams play a large part in running this testing, and the dates of our Oktoberfest matched the city of Kitchener-Waterloo’s Oktoberfest festivities (It’s the second-largest Oktoberfest in the world).\u003c/p\u003e\\n\u003cp\u003eOktoberfest scale-up’s goal was to simulate this year’s expected BFCM load based on the traffic forecasts from the data science team. And the fact that we run Shopify in cloud on Google Kubernetes Engine allowed us to grab extra compute capacity just for the window of the exercise, and only pay for those hours when we needed it.\u003c/p\u003e\\n\u003cp\u003eInvestment in our internal load testing tooling over the years is fundamental to our ability to run such \u003ca href=\\\"https://shopify.engineering/performance-testing-shopify\\\" target=\\\"_blank\\\" title=\\\"Pummelling the Platform–Performance Testing Shopify\\\" rel=\\\"noopener noreferrer\\\"\u003elarge scale, platform-wide load tests\u003c/a\u003e. We’ve talked about \u003ca href=\\\"https://shopify.engineering/announcing-go-lua\\\" target=\\\"_blank\\\" title=\\\"Announcing go-lua - Shopify Engineering\\\" rel=\\\"noopener noreferrer\\\"\u003ego-lua, an open source project that powers our load testing tool\u003c/a\u003e. Thanks to embedded Lua, we feed it with a high-level set of steps for what we want to test: actions like browsing the storefront, adding a product to a card, proceeding to check out, and processing the transaction through a mock payment gateway.\u003c/p\u003e\\n\u003cp\u003eThanks to Oktoberfest scale-up, we identified and then fixed some bottlenecks that could have become an issue for the real BFCM. Doing the test in early October gave us time to address issues.\u003c/p\u003e\\n\u003cp\u003eAfter addressing all the issues, we repeated the scale-up test to see how our mitigations helped. Seeing that going smoothly increased our confidence levels about the upcoming Black Friday and reduced stress levels for all teams.\u003c/p\u003e\\n\u003cp\u003eWe strive for a smooth BFCM and spend a lot of time preparing for it, from capacity planning, to setting the expectations for our vendors, to load testing, and failover simulations. Beyond delivering a smooth holiday season for our merchants, BFCM is time to reflect on the future. As Shopify continues to grow, BFCM traffic levels can become the normal everyday loads we see in the next year. Our job is to bring lessons from events like BFCM to make our systems even more automated, more dynamic, and more resilient. We relish this opportunity to think about where Shopify is going and to architect our platform to scale with it.\u003c/p\u003e\\n\u003cdiv class=\\\"marketing-block marketing-block--light marketing-block--padded\\\"\u003e\\n\u003cp\u003e\u003cstrong\u003eKir Shatrov\u003c/strong\u003e is an Engineering Lead who’s been with Production Engineering at Shopify for the past five years, working on areas from CI/CD infrastructure to sharding and capacity planning.\u003c/p\u003e\\n\u003c/div\u003e\\n\u003cdiv class=\\\"marketing-block marketing-block--light marketing-block--padded\\\"\u003e\\n\u003cp\u003e\u003cstrong\u003eKathryn Tang\u003c/strong\u003e is an Engineering Program Manager who manages our Google Cloud relationship. She has been at Shopify for 4 years, working with a multitude of R\u0026amp;D and commercial teams to derive business insights and guide operating decisions to help us scale.\u003c/p\u003e\\n\u003c/div\u003e\\n\u003chr\u003e\\n\u003cp\u003eWe're planning to DOUBLE our engineering team in 2021 by hiring 2,021 new technical roles (see what we did there?). Our platform handled record-breaking sales over BFCM and commerce isn't slowing down. \u003ca href=\\\"https://www.shopify.com/careers/2021\\\" target=\\\"_blank\\\" title=\\\"We’re planning to double our engineering team in 2021 by hiring 2,021 new technical roles\\\" rel=\\\"noopener noreferrer\\\"\u003eHelp us scale \u0026amp; make commerce better for everyone\u003c/a\u003e.\u0026nbsp;\u003c/p\u003e\u003c/body\u003e\u003c/html\u003e\",\"excerpt\",\"excerptHtml\",{\"_1946\":1983,\"_477\":-5,\"_491\":12},\"metafields\",[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5],\"A line graph showing Shopify's global traffic from BFCM 2019 to BFCM 2020\",\"imageClass\",\"createdAt\",\"Dec 3, 2020\",\"createdAtRaw\",\"2020-12-03\",\"modifiedAtRaw\",\"author\",{\"_1973\":1974,\"_155\":45,\"_1975\":45,\"_1976\":1977,\"_1978\":59,\"_1979\":45,\"_1980\":45,\"_1981\":1982},\"name\",\"Kathryn Tang\",\"bio\",\"avatarUrl\",\"https://www.gravatar.com/avatar/d41d8cd98f00b204e9800998ecf8427e?s=200\u0026d=404\",\"isDisabledAuthor\",\"slug\",\"reviewedBy\",\"additionalAuthors\",[],\"SEO\",\"Image\",\"altText\",\"width\",1102,\"height\",364,\"ArticleAuthor\",\"globalContent\",{\"_536\":537,\"_538\":539,\"_540\":541,\"_534\":535,\"_559\":560,\"_567\":568,\"_573\":574,\"_581\":582,\"_579\":580,\"_575\":576,\"_614\":615,\"_616\":617,\"_612\":613,\"_618\":619,\"_583\":584,\"_589\":590,\"_593\":594,\"_599\":600,\"_597\":598,\"_591\":592,\"_595\":596,\"_606\":607,\"_604\":605,\"_602\":603,\"_608\":609,\"_1740\":1741,\"_1791\":1792,\"_1795\":574,\"_1793\":1794,\"_1796\":1797,\"_1787\":1788,\"_1789\":1790,\"_1994\":45,\"_1995\":45,\"_1996\":45,\"_1779\":1780,\"_1997\":45,\"_1998\":45,\"_1999\":45,\"_2000\":45,\"_2001\":45,\"_2002\":45,\"_2003\":45,\"_2004\":45,\"_1738\":1739,\"_2005\":45,\"_2006\":45,\"_2007\":45,\"_1744\":1745,\"_1750\":1749,\"_1748\":1749,\"_1752\":1215,\"_1751\":1215,\"_1755\":1756,\"_1753\":1754,\"_1759\":1760,\"_1757\":1758,\"_1763\":1764,\"_1761\":1762,\"_1746\":1747,\"_1742\":1743,\"_1765\":1745,\"_1769\":1768,\"_1767\":1768,\"_1772\":1771,\"_1770\":1771,\"_1775\":1774,\"_1773\":1774,\"_1778\":1764,\"_1776\":1777,\"_1766\":1747,\"_857\":858,\"_843\":844,\"_834\":835,\"_2008\":45,\"_2009\":45,\"_864\":436,\"_944\":945,\"_1444\":1445,\"_2010\":45,\"_1046\":1047,\"_1094\":1095,\"_1127\":844,\"_1135\":1136,\"_2011\":45,\"_1238\":1239,\"_1242\":1243,\"_1246\":1247,\"_1490\":1491,\"_1267\":1268,\"_1277\":1278,\"_1281\":1282,\"_2012\":45,\"_2013\":45,\"_2014\":45,\"_2015\":45,\"_2016\":45,\"_2017\":45,\"_1275\":1276,\"_1279\":1280,\"_1273\":1274,\"_1269\":1270,\"_2018\":45,\"_1283\":1284,\"_2019\":45,\"_1271\":1272,\"_2020\":45,\"_1301\":1302,\"_1390\":1391,\"_1410\":858,\"_878\":879,\"_2021\":45,\"_2022\":45,\"_2023\":45,\"_2024\":45,\"_2025\":45,\"_2026\":45,\"_2027\":45,\"_2028\":45,\"_2029\":45,\"_938\":939,\"_880\":437,\"_881\":835,\"_882\":883,\"_2030\":45,\"_891\":892,\"_889\":890,\"_884\":844,\"_2031\":45},\"skipToContentText\",\"brochureBot.bookingFailed\",\"brochureBot.chatErrorFallback.problemLoadingAssistant\",\"brochureBot.chatErrorFallback.reloadThisPage\",\"brochureBot.enterpriseWelcomeQuestions.heading\",\"brochureBot.enterpriseWelcomeQuestions.questions.0.answer\",\"brochureBot.enterpriseWelcomeQuestions.questions.0.question\",\"brochureBot.enterpriseWelcomeQuestions.questions.1.answer\",\"brochureBot.enterpriseWelcomeQuestions.questions.1.question\",\"brochureBot.enterpriseWelcomeQuestions.questions.2.answer\",\"brochureBot.enterpriseWelcomeQuestions.questions.2.question\",\"brochureBot.enterpriseWelcomeQuestions.subhead\",\"brochureBot.messageInput.placeholder\",\"brochureBot.messageInput.send\",\"brochureBot.messageInput.stopGenerating\",\"globalNav.signupTextTryPlus\",\"globalNav.signupTextTryShopify\",\"nav.businessSizes\",\"nav.industries\",\"nav.posBikes\",\"nav.posClothingShoesAccessories\",\"nav.posFurnitureHomeDecor\",\"nav.posGiftHobbyToy\",\"nav.posGolf\",\"nav.posHardwarePaintSupply\",\"nav.posSkiSnowboarding\",\"nav.posSportingGoods\",\"nav.posWineLiquorBeer\",\"rightClickSave.copied\",\"rightClickSave.copyIcon\",\"rightClickSave.copyIconAriaLabel\",\"rightClickSave.copyLogo\",\"rightClickSave.copyLogoAriaLabel\",\"rightClickSave.downloadIconAlt\",\"rightClickSave.getBrandAssets\",\"rightClickSave.getBrandAssetsAriaLabel\",\"rightClickSave.menuAriaLabel\",\"signup.buttonTextTryPlus\",\"signup.trialDisclaimerHtml\"]\n");</script><!--$--><script>window.__reactRouterContext.streamController.close();</script><!--/$--><!--/$--> |