{"id":31720,"date":"2026-01-26T22:33:21","date_gmt":"2026-01-26T22:33:21","guid":{"rendered":"https:\/\/www.intercom.com\/blog\/?p=31720"},"modified":"2026-01-27T11:22:14","modified_gmt":"2026-01-27T11:22:14","slug":"the-safety-of-speed-shipping-code-at-intercom","status":"publish","type":"post","link":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/","title":{"rendered":"The safety of speed: How we ship code 180 times per day"},"content":{"rendered":"<p>&#8220;Speed is not the enemy of safety; it is the prerequisite for it.&#8221;<\/p>\n<p><span style=\"font-weight: 400;\">At Intercom, the average time from merging code to it being used by customers in production is just 12 minutes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In January 2026, we are averaging <strong>180 ships per workday<\/strong> \u2013 roughly 20 deployments every hour. Conventional wisdom suggests that to increase stability, you must slow down. We believe the opposite. At Intercom, speed is not the enemy of safety; it is the prerequisite for it. Accumulating code creates risk; shipping small batches minimizes it. Shipping is <\/span><a href=\"https:\/\/www.intercom.com\/blog\/shipping-is-your-companys-heartbeat\/\"><span style=\"font-weight: 400;\">our company\u2019s heartbeat<\/span><\/a><span style=\"font-weight: 400;\">.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Maintaining this frequency that fuels our product innovation, while targeting 99.8+% availability is a constant battle and has required over a decade of significant investment in systems, principles and processes. We protect the integrity of our systems through three distinct layers of defense: an <\/span><b>automated pipeline<\/b><span style=\"font-weight: 400;\"> that is simple, reliable and removes the need for manual intervention, a <\/span><b>shipping workflow<\/b><span style=\"font-weight: 400;\"> that promotes ownership and is flexible enough to provide guardrails that act as accelerants, and a <\/span><b>recovery model<\/b><span style=\"font-weight: 400;\"> optimising for mitigating inevitable failures. Here is how we&#8217;ve built each layer to ensure our velocity remains our greatest source of stability.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">While Intercom consists of various services and frontend applications, this post focuses on our <\/span><b>Ruby on Rails monolith<\/b><span style=\"font-weight: 400;\">. It is our core application and the one we deploy most frequently; we also deploy it to three different data-hosting regions with independent pipelines. While our other services (such as our Intercom UI) follow similar pipeline principles and safeguards, the Rails monolith is the best example of how we ship code at our scale.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-31725\" src=\"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/v3_Deployment_Wordpress-300x164.png\" alt=\"ProductionDeployment_Fin\" width=\"785\" height=\"429\" srcset=\"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/v3_Deployment_Wordpress-300x164.png 300w, https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/v3_Deployment_Wordpress-700x382.png 700w, https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/v3_Deployment_Wordpress-768x419.png 768w, https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/v3_Deployment_Wordpress-1536x838.png 1536w, https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/v3_Deployment_Wordpress-1320x720.png 1320w, https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/v3_Deployment_Wordpress.png 1596w\" sizes=\"auto, (max-width: 785px) 100vw, 785px\" \/><\/p>\n<h2 id=\"the-automated-pipeline\"><span style=\"font-weight: 400;\">The automated pipeline<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Designed to move code from merge to production as fast as possible while enforcing strict safety checks, our pipeline is optimized for speed and safety and is entirely automated with the majority of releases requiring no human intervention.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Build and parallel testing<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">The process begins when an engineer merges code to GitHub. Two things happen immediately:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>The build:<\/b><span style=\"font-weight: 400;\"> We compile the Rails application and its dependencies into a deployable asset that we call a slug. This takes four minutes.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Parallel CI:<\/b><span style=\"font-weight: 400;\"> Our test suite runs in parallel with the build. Through extensive optimization, parallelization and test selection, the vast majority of CI builds finish in under five minutes.<\/span><\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400;\">Pre-production verification<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Once built, the slug is deployed to a pre-production environment. CI does not block the progression of the slug to pre-production. Deploying to pre-production takes around two minutes. This environment serves no customer traffic, but it is connected to our production datastores and mirrors our production infrastructure variants (e.g. web serving, asynchronous worker) and is configured in a way that requests will exercise the pre-release code\/workers.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Immediately after deployment we run and await the result of several automated approval gates to verify the release. These answer questions including:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Boot test:<\/b><span style=\"font-weight: 400;\"> Does the application initialise correctly on the host?<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>CI check:<\/b><span style=\"font-weight: 400;\"> Did the parallel test suite pass?<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Functional synthetics:<\/b><span style=\"font-weight: 400;\"> We use Datadog Synthetics to run browser-based tests on critical flows, like loading or editing a Fin workflow.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">If any gate fails, the release is halted and does not go to production.\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Production rollout and rolling restarts<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Once the slug is approved for production, the code is promoted to thousands of large virtual machines. We use a deployment orchestrator to trigger these deployments simultaneously, but the actual rollout is decentralised.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This provides a staggered rollout, ensuring the entire fleet doesn&#8217;t change state at the exact same millisecond. Within these large virtual machines, we use a<\/span> <span style=\"font-weight: 400;\">rolling restart mechanism at the process level:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">An individual process with the old code is taken out of the customer-serving path<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">It is allowed to finish its current work and terminate gracefully once idle<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">It is replaced by a fresh process running the new code and returned to the serving path<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">This process ensures that from the moment a deployment starts, the first requests are being served by new code within ~2 minutes. Within 6 minutes, the vast majority of our global fleet has been transparently updated without any downtime. When the restart is triggered on every machine, the pipeline unblocks production so the next deployment can begin.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Monitoring pipeline health\u00a0<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">If a piece of code doesn&#8217;t pass every safety check, it is automatically rejected before it ever touches a production server. Additionally we treat a stalled pipeline as a high-priority incident; if the automated system rejects three consecutive release attempts, it triggers a page to an on-call engineer.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To a customer, waiting for three failures might sound like a lot, but these are pre-production blocks. We page a human at this stage because if the shipping lane stops moving, code changes begin to pile up. Our stability relies on <\/span><a href=\"https:\/\/www.intercom.com\/blog\/intercom-product-principles-build-in-small-steps\/\"><span style=\"font-weight: 400;\">building and shipping in small steps<\/span><\/a><span style=\"font-weight: 400;\">. If the pipeline stays blocked, those tiny steps merge into a large changeset which increases the risk of the next deployment. We page an engineer to fix the pipeline so we can return to the small, safe, and frequent updates that keep our systems stable.<\/span><\/p>\n<h2 id=\"the-shipping-workflow\"><span style=\"font-weight: 400;\">The shipping workflow<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">While our pipeline is highly automated, the responsibility for the quality of our code lies with the engineer, not the tools. The decision to merge is a human one. Our workflow is built on the principle of extreme ownership; the engineer who writes the code is accountable for its success in production.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Be present when you ship<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">A core tenet of our culture is that you must be present when you ship. There is a practical benefit to our 12-minute deployment cycle: it keeps the engineer &#8220;in the zone.&#8221; When a deployment takes hours, engineers naturally move on to the next task, a meeting, or a lunch break. By the time their code hits production, their context is gone and they aren\u2019t watching anymore.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">By keeping deployments fast, we ensure the engineer is still focused on the problem they just solved. To support this, our deployment system provides:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Notifications<\/b><span style=\"font-weight: 400;\">: Automatically messages the engineer on Slack the moment their code is submitted and as it moves through the stages.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Observability links<\/b><span style=\"font-weight: 400;\">: Includes direct links to relevant dashboards and logs in every PR and Slack message.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Prompted verification<\/b><span style=\"font-weight: 400;\">: Encourages the engineer to actively &#8220;watch the dials&#8221; and test their feature as it goes live. It is not acceptable to rely on &#8220;green builds&#8221;. You\u2019re expected to watch your change go live and if you\u2019re not prepared to rollback, you\u2019re not prepared to ship.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">We foster a no-blame culture focused on engagement. When we see an engineer trigger a rollback or open a revert immediately after a deployment, we don&#8217;t see it as a failure, we see it as a hallmark of an engineer who is actively watching their metrics and taking responsibility for the system&#8217;s health.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Feature flags<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">We make extensive use of feature flags to turn deployment into a non-event. By decoupling deployment (moving code to servers) from release (turning features on), we remove the blast radius of a new feature. Flags can be enabled for all customers, a specific subset, or disabled for everyone in under 60 seconds through our backend UI. Engineers can flag small or large ones, group flags together into beta features, initiate phased rollouts etc. We\u2019ve also invested in ensuring that these feature flags can be used in other non-Rails monolith applications. Flags can allow subsets of users to be opted in to behaviors for testing before wider release, protect against risky changes and everything in between. They\u2019re heavily used at Intercom; we created over 560 flags in the past three months, and we actively manage them so they don\u2019t turn into permanent complexity.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Experiment with GitHub Scientist<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">For complex refactors and especially ones where behaviour should not change, we leverage <\/span><a href=\"https:\/\/github.com\/github\/scientist\"><span style=\"font-weight: 400;\">GitHub Scientist<\/span><\/a><span style=\"font-weight: 400;\">, an open source experimentation library. This allows us to run &#8220;candidate&#8221; logic (the new code) in parallel with &#8220;existing&#8221; logic (the old code) in production. Scientist auto-instruments both paths, comparing results and timing metrics in the background. Because only the existing behaviour is shown to the customer, we can iterate on and verify the new code under real production load without any risk to the user experience. When we\u2019re confident that the candidate logic is correct, we can then seamlessly switch.\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Manual verification\u00a0<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Before merging code, engineers have the ability to generate a slug and deploy it to a virtual machine. Engineers can detach a running production machine from the customer-serving path and deploy their slug to it, connecting to the machine for manual testing. Engineers can also put their pre-release slug on a customer-serving machine where it will serve a small percentage of jobs or web requests in the fleet. Single hosts allow us to quickly filter our observability to these hosts and compare\/contrast with the production release and generally makes low-level changes simpler and safer.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We do this because staging is a simulation, but production is reality. No amount of pre-production testing can perfectly mimic the chaotic behavior of millions of users. By testing on a single production host, we validate our assumptions against real-world data without risking the entire fleet.<\/span><\/p>\n<h2 id=\"our-recovery-model\"><span style=\"font-weight: 400;\">Our recovery model<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">The size and complexity of Intercom and how our customers use the product in different and novel ways cannot be replicated by traditional non-production environments and testing. These things are still very important and have their place in our pipeline but failure in production is inevitable. Some of these failures will result in product degradation for customers and fewer still will result in an outage.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">At Intercom, our approach to recovery is defined by one core principle:<\/span><a href=\"https:\/\/www.intercom.com\/blog\/stop-monitoring-systems-start-monitoring-outcomes\/\"> <b>Stop monitoring systems; start monitoring outcomes<\/b><\/a><span style=\"font-weight: 400;\">. Traditional monitoring tells you if a server is healthy; our recovery model tells us if our <\/span><i><span style=\"font-weight: 400;\">customers<\/span><\/i><span style=\"font-weight: 400;\"> are healthy.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Heartbeat metrics: the pulse of Intercom<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">We rely on heartbeat metrics, which are vital signs that represent the core value our product provides. For Intercom, this includes the rate of comments created (new messages and replies).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Unlike standard uptime checks, these metrics are binary in spirit. If the rate of messages being sent drops below an expected baseline, it doesn&#8217;t matter if our dashboards are green. To a customer, down is down. If they can\u2019t do their job, our uptime percentage is irrelevant. By tracking real-world success rates as a high level signal, we detect subtle degradations that traditional alerting either misses or over-alerts on.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Rapid recovery: rollbacks<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Because we ship in small, incremental steps and maintain previous releases on the virtual machines, our Time to Recover (TTR) is generally very fast.\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Automatic rollbacks:<\/b><span style=\"font-weight: 400;\"> If a heartbeat metric drops or a critical anomaly is detected immediately following a ship, the system triggers an automatic rollback. The pipeline reverts the deployment to the release that was running 20 minutes ago. This often initiates service recovery before an engineer responds to the page.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Manual rollbacks:<\/b><span style=\"font-weight: 400;\"> For complex issues, engineers can trigger a rollback through our deployment UI.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Initiating a manual rollback also locks the production pipeline. This prevents further releases from going to production, giving us the space to remove the problematic code and investigate without impacting customers.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Hardening production<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Resumption of service is never the end of the process. Every incident leads to an incident review, but we don&#8217;t just fix the bug. We view every incident as a signal that our system allowed a failure. We ask: <\/span><i><span style=\"font-weight: 400;\">How did the machine allow this to happen?<\/span><\/i><span style=\"font-weight: 400;\"> and we re-engineer the system to ensure it cannot happen again. By maintaining this loop of fast shipping, fast recovery, and rigorous learning, we ensure that our high velocity remains our greatest source of stability.<\/span><\/p>\n<h2 id=\"conclusion\"><span style=\"font-weight: 400;\">Conclusion<\/span><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-31727\" src=\"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/SafetyOfSpeed-300x140.png\" alt=\"\" width=\"846\" height=\"395\" srcset=\"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/SafetyOfSpeed-300x140.png 300w, https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/SafetyOfSpeed-700x327.png 700w, https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/SafetyOfSpeed-768x359.png 768w, https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/SafetyOfSpeed-1536x717.png 1536w, https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/SafetyOfSpeed-1320x616.png 1320w, https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/SafetyOfSpeed.png 1778w\" sizes=\"auto, (max-width: 846px) 100vw, 846px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Shipping 180 times a day isn&#8217;t a vanity metric. It is a deliberate choice to protect the customer experience. When the window between writing code and customers using it is 12 minutes, the feedback loop is tight, and engineers retain the context and remain accountable for the immediate impact of their work.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">However, our bar is high. Maintaining this pace requires more than just fast CI; it requires engineers who exercise judgment and nail <\/span><a href=\"https:\/\/www.intercom.com\/blog\/ship-fast-safe-learn-from-production\/\"><span style=\"font-weight: 400;\">the basics of shipping safely<\/span><\/a><span style=\"font-weight: 400;\">. We rely on human expertise, augmented by these layers of defense, to catch issues before they turn into customer pain.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">At Intercom, we don&#8217;t ship fast despite our need for stability; we ship fast to stay in control of change.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Averaging 180 ships per day, Intercom releases 20 deployments every hour. Find out how we ship code constantly, recover quickly, and use velocity to drive stability.<\/p>\n","protected":false},"author":114,"featured_media":31726,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"category":[25198,12898],"tags":[335,58,18595],"coauthors":[498,599],"class_list":["post-31720","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-ml","category-engineering","tag-engineering","tag-shipping","tag-speed"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>The safety of speed: How we ship code 180 times per day - The Intercom Blog<\/title>\n<meta name=\"description\" content=\"At Intercom, the gap between writing code and customers using it is about one coffee break. Here\u2019s how we ship constantly, recover quickly, and still hit 99.8%+ availability.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The safety of speed: How we ship code 180 times per day\" \/>\n<meta property=\"og:description\" content=\"At Intercom, the gap between writing code and customers using it is about one coffee break. Here\u2019s how we ship constantly, recover quickly, and still hit 99.8%+ availability.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/\" \/>\n<meta property=\"og:site_name\" content=\"The Intercom Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/intercominc\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-26T22:33:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-27T11:22:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/Option2_Safety.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1778\" \/>\n\t<meta property=\"og:image:height\" content=\"830\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Danny Fallon, Ryan Sherlock\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@danny\" \/>\n<meta name=\"twitter:site\" content=\"@intercom\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Danny Fallon, Ryan Sherlock\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/the-safety-of-speed-shipping-code-at-intercom\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/the-safety-of-speed-shipping-code-at-intercom\\\/\"},\"author\":{\"name\":\"Danny Fallon\",\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/#\\\/schema\\\/person\\\/f87f3278b4840ac886f1f7db4a9d1435\"},\"headline\":\"The safety of speed: How we ship code 180 times per day\",\"datePublished\":\"2026-01-26T22:33:21+00:00\",\"dateModified\":\"2026-01-27T11:22:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/the-safety-of-speed-shipping-code-at-intercom\\\/\"},\"wordCount\":2060,\"publisher\":{\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/the-safety-of-speed-shipping-code-at-intercom\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/Option2_Safety.png\",\"keywords\":[\"Engineering\",\"Shipping\",\"Speed\"],\"articleSection\":[\"AI &amp; Automation\",\"Engineering\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/the-safety-of-speed-shipping-code-at-intercom\\\/\",\"url\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/the-safety-of-speed-shipping-code-at-intercom\\\/\",\"name\":\"The safety of speed: How we ship code 180 times per day - The Intercom Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/the-safety-of-speed-shipping-code-at-intercom\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/the-safety-of-speed-shipping-code-at-intercom\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/Option2_Safety.png\",\"datePublished\":\"2026-01-26T22:33:21+00:00\",\"dateModified\":\"2026-01-27T11:22:14+00:00\",\"description\":\"At Intercom, the gap between writing code and customers using it is about one coffee break. Here\u2019s how we ship constantly, recover quickly, and still hit 99.8%+ availability.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.intercom.com\\\/blog\\\/the-safety-of-speed-shipping-code-at-intercom\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/the-safety-of-speed-shipping-code-at-intercom\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/Option2_Safety.png\",\"contentUrl\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/Option2_Safety.png\",\"width\":1778,\"height\":830},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/\",\"name\":\"The Intercom Blog\",\"description\":\"Articles and Podcasts on Customer Service, AI and Automation, Product, and more\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/#organization\",\"name\":\"The Intercom Blog\",\"url\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/Intercom-logo-sq-black-trans.png\",\"contentUrl\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/Intercom-logo-sq-black-trans.png\",\"width\":1000,\"height\":1000,\"caption\":\"The Intercom Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/intercominc\",\"https:\\\/\\\/x.com\\\/intercom\",\"https:\\\/\\\/www.instagram.com\\\/intercom\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/2491343\",\"https:\\\/\\\/www.pinterest.ie\\\/intercom\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCJG0MvLP03kyzzAkD-w98aQ\",\"https:\\\/\\\/en.wikipedia.org\\\/wiki\\\/Intercom_(company)\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/#\\\/schema\\\/person\\\/f87f3278b4840ac886f1f7db4a9d1435\",\"name\":\"Danny Fallon\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/44fc41d0802101ede54c7a9fb56fc2fd078bfcaf03b8733a61b5c4322d1d5b75?s=96&d=mm&r=pg959b5469d1e8fda9b9a306e533272f06\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/44fc41d0802101ede54c7a9fb56fc2fd078bfcaf03b8733a61b5c4322d1d5b75?s=96&d=mm&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/44fc41d0802101ede54c7a9fb56fc2fd078bfcaf03b8733a61b5c4322d1d5b75?s=96&d=mm&r=pg\",\"caption\":\"Danny Fallon\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/danny\"],\"url\":\"https:\\\/\\\/www.intercom.com\\\/blog\\\/author\\\/danny\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"The safety of speed: How we ship code 180 times per day - The Intercom Blog","description":"At Intercom, the gap between writing code and customers using it is about one coffee break. Here\u2019s how we ship constantly, recover quickly, and still hit 99.8%+ availability.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/","og_locale":"en_US","og_type":"article","og_title":"The safety of speed: How we ship code 180 times per day","og_description":"At Intercom, the gap between writing code and customers using it is about one coffee break. Here\u2019s how we ship constantly, recover quickly, and still hit 99.8%+ availability.","og_url":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/","og_site_name":"The Intercom Blog","article_publisher":"https:\/\/www.facebook.com\/intercominc","article_published_time":"2026-01-26T22:33:21+00:00","article_modified_time":"2026-01-27T11:22:14+00:00","og_image":[{"width":1778,"height":830,"url":"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/Option2_Safety.png","type":"image\/png"}],"author":"Danny Fallon, Ryan Sherlock","twitter_card":"summary_large_image","twitter_creator":"@danny","twitter_site":"@intercom","twitter_misc":{"Written by":"Danny Fallon, Ryan Sherlock","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/#article","isPartOf":{"@id":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/"},"author":{"name":"Danny Fallon","@id":"https:\/\/www.intercom.com\/blog\/#\/schema\/person\/f87f3278b4840ac886f1f7db4a9d1435"},"headline":"The safety of speed: How we ship code 180 times per day","datePublished":"2026-01-26T22:33:21+00:00","dateModified":"2026-01-27T11:22:14+00:00","mainEntityOfPage":{"@id":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/"},"wordCount":2060,"publisher":{"@id":"https:\/\/www.intercom.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/#primaryimage"},"thumbnailUrl":"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/Option2_Safety.png","keywords":["Engineering","Shipping","Speed"],"articleSection":["AI &amp; Automation","Engineering"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/","url":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/","name":"The safety of speed: How we ship code 180 times per day - The Intercom Blog","isPartOf":{"@id":"https:\/\/www.intercom.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/#primaryimage"},"image":{"@id":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/#primaryimage"},"thumbnailUrl":"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/Option2_Safety.png","datePublished":"2026-01-26T22:33:21+00:00","dateModified":"2026-01-27T11:22:14+00:00","description":"At Intercom, the gap between writing code and customers using it is about one coffee break. Here\u2019s how we ship constantly, recover quickly, and still hit 99.8%+ availability.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.intercom.com\/blog\/the-safety-of-speed-shipping-code-at-intercom\/#primaryimage","url":"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/Option2_Safety.png","contentUrl":"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/Option2_Safety.png","width":1778,"height":830},{"@type":"WebSite","@id":"https:\/\/www.intercom.com\/blog\/#website","url":"https:\/\/www.intercom.com\/blog\/","name":"The Intercom Blog","description":"Articles and Podcasts on Customer Service, AI and Automation, Product, and more","publisher":{"@id":"https:\/\/www.intercom.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.intercom.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.intercom.com\/blog\/#organization","name":"The Intercom Blog","url":"https:\/\/www.intercom.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.intercom.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2019\/08\/Intercom-logo-sq-black-trans.png","contentUrl":"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2019\/08\/Intercom-logo-sq-black-trans.png","width":1000,"height":1000,"caption":"The Intercom Blog"},"image":{"@id":"https:\/\/www.intercom.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/intercominc","https:\/\/x.com\/intercom","https:\/\/www.instagram.com\/intercom\/","https:\/\/www.linkedin.com\/company\/2491343","https:\/\/www.pinterest.ie\/intercom\/","https:\/\/www.youtube.com\/channel\/UCJG0MvLP03kyzzAkD-w98aQ","https:\/\/en.wikipedia.org\/wiki\/Intercom_(company)"]},{"@type":"Person","@id":"https:\/\/www.intercom.com\/blog\/#\/schema\/person\/f87f3278b4840ac886f1f7db4a9d1435","name":"Danny Fallon","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/44fc41d0802101ede54c7a9fb56fc2fd078bfcaf03b8733a61b5c4322d1d5b75?s=96&d=mm&r=pg959b5469d1e8fda9b9a306e533272f06","url":"https:\/\/secure.gravatar.com\/avatar\/44fc41d0802101ede54c7a9fb56fc2fd078bfcaf03b8733a61b5c4322d1d5b75?s=96&d=mm&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/44fc41d0802101ede54c7a9fb56fc2fd078bfcaf03b8733a61b5c4322d1d5b75?s=96&d=mm&r=pg","caption":"Danny Fallon"},"sameAs":["https:\/\/x.com\/danny"],"url":"https:\/\/www.intercom.com\/blog\/author\/danny\/"}]}},"jetpack_featured_media_url":"https:\/\/www.intercom.com\/blog\/wp-content\/uploads\/2026\/01\/Option2_Safety.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.intercom.com\/blog\/wp-json\/wp\/v2\/posts\/31720","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.intercom.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.intercom.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.intercom.com\/blog\/wp-json\/wp\/v2\/users\/114"}],"replies":[{"embeddable":true,"href":"https:\/\/www.intercom.com\/blog\/wp-json\/wp\/v2\/comments?post=31720"}],"version-history":[{"count":0,"href":"https:\/\/www.intercom.com\/blog\/wp-json\/wp\/v2\/posts\/31720\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.intercom.com\/blog\/wp-json\/wp\/v2\/media\/31726"}],"wp:attachment":[{"href":"https:\/\/www.intercom.com\/blog\/wp-json\/wp\/v2\/media?parent=31720"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.intercom.com\/blog\/wp-json\/wp\/v2\/category?post=31720"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.intercom.com\/blog\/wp-json\/wp\/v2\/tags?post=31720"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.intercom.com\/blog\/wp-json\/wp\/v2\/coauthors?post=31720"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}