{"id":104817,"date":"2024-12-20T20:21:43","date_gmt":"2024-12-20T20:21:43","guid":{"rendered":"https:\/\/www.red-gate.com\/simple-talk\/?p=104817"},"modified":"2025-06-27T14:43:33","modified_gmt":"2025-06-27T14:43:33","slug":"demystifying-continuous-integration-vs-continuous-delivery-part-3-real-world-examples-of-ci-cd","status":"publish","type":"post","link":"https:\/\/www.red-gate.com\/simple-talk\/devops\/demystifying-continuous-integration-vs-continuous-delivery-part-3-real-world-examples-of-ci-cd\/","title":{"rendered":"Demystifying Continuous Integration vs. Continuous Delivery Part 3 &#8211; Real World Examples of CI CD"},"content":{"rendered":"\n<p>This article covers examples of how some larger companies have successfully implemented CI\/CD practices to transform their development processes. Through these case studies, we will examine strategies employed by Netflix, Etsy, Google, Amazon, and Facebook, highlighting their unique approaches and the benefits they have achieved. These examples provide valuable insights into how CI\/CD can be leveraged to address complex challenges and drive innovation in diverse software environments.<\/p>\n\n\n\n<p>Examples and case studies from companies we all know help provide context into how organizations effectively implement CI\/CD practices to improve their software development processes. These examples demonstrate the benefits, challenges, and strategies used by different companies to integrate CI\/CD into their workflows.<\/p>\n\n\n\n<p>The following case studies are from some larger companies including Netflix, Etsy, Google, Amazon, and Facebook. The case studies and examples referenced are published by or for the companies that are included. I am sharing summaries and links to the originals if you want to read deeper, but my goal is to show you that larger companies are doing this, and from the names listed you should realize that every minute these company\u2019s systems are down will cost a lot of money.<\/p>\n\n\n\n<p>The code snippets included are mostly illustrative, but they are representative of the actual tools and practices that these companies use to achieve their CI\/CD goals<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-case-study-1-netflix\">Case Study 1: Netflix<\/h2>\n\n\n\n<p>Netflix is a leading global streaming service known for its rapid development and deployment capabilities. The company has fully embraced CI\/CD to deliver updates and new features continuously, ensuring an uninterrupted user experience. According to <a href=\"https:\/\/44243536.fs1.hubspotusercontent-na1.net\/hubfs\/44243536\/Blog%20CTA%20Documents\/Netflixs%20Coding%20Revolution%20The%20CI-CD%20Story%20Unveiled.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">a case study by Netflix<\/a>, the adoption of CI\/CD has been instrumental in their ability to scale and innovate quickly.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-implementation-strategy\">Implementation Strategy<\/h3>\n\n\n\n<p>To achieve seamless CI\/CD, Netflix <a href=\"https:\/\/www.linkedin.com\/pulse\/monolithic-vs-microservices-architecture-case-study-netflix-asif\/\" target=\"_blank\" rel=\"noreferrer noopener\">transitioned<\/a> from a monolithic architecture to a <a href=\"https:\/\/netflixtechblog.com\/tagged\/microservices\" target=\"_blank\" rel=\"noreferrer noopener\">microservices architecture<\/a>. This shift allowed independent teams to develop and deploy services autonomously, facilitating continuous integration and delivery. Central to their strategy is <a href=\"https:\/\/spinnaker.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spinnaker<\/a>, an open-source, multi-cloud <a href=\"http:\/\/techblog.netflix.com\/2015\/11\/global-continuous-delivery-with.html\" target=\"_blank\" rel=\"noreferrer noopener\">Continuous Delivery platform developed by Netflix<\/a>. Spinnaker automates deployments across different cloud environments, ensuring that code changes are continuously integrated and delivered to production with minimal manual intervention.<\/p>\n\n\n\n<p>Here\u2019s an example code snippet of Spinnaker for Continuous Delivery:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Spinnaker pipeline configuration example\nstages:\n  - name: Deploy to Staging\n    type: deploy\n    config:\n      clusters:\n        - account: aws-staging\n          application: my-app\n          availabilityZones:\n            us-west-2: ['us-west-2a']<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-explanation\">Explanation<\/h3>\n\n\n\n<p>This snippet represents a simplified view of Netflix\u2019s deployment pipeline using Spinnaker. It outlines how Netflix automates the deployment process, from defining stages to specifying configurations for deploying applications in a specific cloud environment (in this case, AWS). The configuration illustrates the meticulous planning involved in deploying code changes, where each stage in the pipeline is carefully defined to ensure seamless integration and delivery across multiple environments.<\/p>\n\n\n\n<p>This level of automation is crucial for a company like Netflix, where the ability to deploy thousands of code changes daily is essential for maintaining a competitive edge in the streaming industry.<\/p>\n\n\n\n<p>In addition to their architecture and tooling, Netflix emphasizes automated testing throughout the development lifecycle, utilizing unit tests, integration tests, and canary releases to ensure code quality. Their adoption of chaos engineering practices, such as Chaos Monkey, further tests the resilience of their systems by intentionally disrupting services in production to ensure systems can withstand failures and recover quickly <a href=\"https:\/\/netflix.github.io\/chaosmonkey\/\" target=\"_blank\" rel=\"noreferrer noopener\">Netflix TechBlog<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-benefits-achieved\">Benefits Achieved<\/h3>\n\n\n\n<p>Through these strategies, Netflix has increased its deployment frequency, deploying thousands of code changes daily, which significantly reduces the time to market for new features and improvements \u2014 <a href=\"https:\/\/contactchanaka.medium.com\/devops-case-study-netflix-7fe289311c6a\" target=\"_blank\" rel=\"noreferrer noopener\">DevOps Case study : NETFLIX.<\/a> Additionally, the adoption of CI\/CD and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Chaos_engineering\" target=\"_blank\" rel=\"noreferrer noopener\">chaos engineering<\/a> has enhanced Netflix&#8217;s system reliability, leading to a better user experience and fewer outages, along with increased scalability and flexibility to handle growing user demands.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-case-study-2-etsy\">Case Study 2: Etsy<\/h2>\n\n\n\n<p>Etsy, a global online marketplace for handmade and vintage items, utilizes CI\/CD to deliver new features and improvements to its platform rapidly. By integrating CI\/CD practices, Etsy has significantly reduced deployment times and increased development agility. According to <a href=\"https:\/\/www.simform.com\/blog\/etsy-devops-case-study\/\" target=\"_blank\" rel=\"noreferrer noopener\">Etsy DevOps Case Study: The Secret to 50 Plus Deploys a Day<\/a> their approach to CI\/CD has enabled faster, safer deployments, which is critical in a dynamic e-commerce environment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-implementation-strategy-0\">Implementation Strategy<\/h3>\n\n\n\n<p>According to their official <a href=\"https:\/\/www.etsy.com\/codeascraft\" target=\"_blank\" rel=\"noreferrer noopener\">Code as Craft<\/a> <a href=\"https:\/\/www.etsy.com\/codeascraft\/how-etsy-ships-apps\" target=\"_blank\" rel=\"noreferrer noopener\">Docs<\/a>, Etsy employs an extensive suite of automated tests, including unit tests, integration tests, and <a href=\"https:\/\/www.etsy.com\/fr\/codeascraft\/etsys-journey-to-continuous-integration-for-mobile-apps\" target=\"_blank\" rel=\"noreferrer noopener\">end-to-end tests<\/a>. These tests are triggered automatically whenever code changes are pushed to the repository. This ensures that only high-quality code reaches production. Additionally, Etsy uses feature toggles to enable or disable features in production without deploying new code, allowing them to release new features to a limited audience for testing and feedback before a full rollout.<\/p>\n\n\n\n<p>Here\u2019s a basic code snippet example for automated testing and deployment:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Sample script for automated testing and deployment\nnpm install\nnpm test\nif [ $? -eq 0 ]; then\n  echo \"Tests passed, deploying to production...\"\n  .\/deploy.sh\nelse\n  echo \"Tests failed, deployment aborted.\"\nfi<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-explanation-0\">Explanation<\/h3>\n\n\n\n<p>This snippet is representative of the automation scripts used at Etsy to streamline the CI\/CD process. The script first installs the necessary dependencies using <code>npm install<\/code>, then runs the tests using <code>npm test<\/code>. If the tests pass <code>($? -eq 0<\/code>), the script proceeds to deploy the changes to production (<code>.\/deploy.sh<\/code>).<\/p>\n\n\n\n<p>If the tests fail, the deployment is aborted. This approach reflects Etsy\u2019s commitment to maintaining high code quality while minimizing manual intervention. The automated testing and deployment script is a critical component of Etsy\u2019s CI\/CD pipeline, ensuring that only thoroughly tested code reaches production, thus reducing the risk of errors and enhancing the overall stability of the platform.<\/p>\n\n\n\n<p>Their continuous deployment pipeline automatically pushes code changes to production upon successful testing and approval, integrating with monitoring and alerting tools to ensure the platform&#8217;s health and performance <a href=\"https:\/\/www.slideshare.net\/slideshow\/continuous-deployment-at-etsy-timesopen-nyc\/37264623\" target=\"_blank\" rel=\"noreferrer noopener\">Etsy&#8217;s CI\/CD Pipeline<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-benefits-achieved-0\">Benefits Achieved<\/h3>\n\n\n\n<p>With these CI\/CD practices<a href=\"https:\/\/www.infoq.com\/news\/2014\/03\/etsy-deploy-50-times-a-day\/\" target=\"_blank\" rel=\"noreferrer noopener\">, Etsy has reduced its deployment time from hours to minutes<\/a>, enabling the company to respond swiftly to market demands and customer feedback. The integration of automated testing and continuous monitoring has significantly improved code quality, reducing production errors, and enhancing developer productivity by allowing them to focus on writing code and delivering value.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-case-study-3-google\">Case Study 3: Google<\/h2>\n\n\n\n<p>Google, a tech giant known for its innovative products and services, has embraced <a href=\"https:\/\/cloud.google.com\/build\" target=\"_blank\" rel=\"noreferrer noopener\">CI\/CD<\/a> to maintain high development standards and deliver features at scale. Google&#8217;s approach to CI\/CD is centered around automation, scalability, and quality, as highlighted in their <a href=\"https:\/\/developers.googleblog.com\/en\/search\/?query=google+CI%2FCD&amp;_gl=1*ahsitg*_up*MQ..*_ga*MjA1MDc0MjE5Mi4xNzI0NTcyODU4*_ga_H733Y2BZES*MTcyNDU3Mjg1Ny4xLjAuMTcyNDU3Mjg1Ny4wLjAuMA..\" target=\"_blank\" rel=\"noreferrer noopener\">engineering blog<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-implementation-strategy-1\">Implementation Strategy<\/h3>\n\n\n\n<p>Google uses a <a href=\"https:\/\/research.google\/pubs\/why-google-stores-billions-of-lines-of-code-in-a-single-repository\/\" target=\"_blank\" rel=\"noreferrer noopener\">monorepo<\/a> structure to store its <a href=\"https:\/\/blog.bytebytego.com\/p\/ep62-why-does-google-use-monorepo\">vast codebase<\/a>, enabling efficient code sharing and collaboration across teams. This centralized repository facilitates CI\/CD by providing a unified location for code integration and testing. To manage its CI\/CD pipeline, Google developed <a href=\"https:\/\/bazel.build\/\" target=\"_blank\" rel=\"noreferrer noopener\">Bazel,<\/a> an open-source build and test tool that supports parallel builds and tests, ensuring fast feedback and efficient resource utilization <a href=\"https:\/\/bazel.build\/\" target=\"_blank\" rel=\"noreferrer noopener\">Bazel<\/a>.<\/p>\n\n\n\n<p>Here\u2019s an example code snippet for Bazel build and test commands:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Bazel build command example\nbazel build \/\/my-project:all\nbazel test \/\/my-project:tests<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-explanation-1\">Explanation<\/h3>\n\n\n\n<p>This code snippet provides a glimpse into how Google uses Bazel to manage builds and tests across its extensive codebase. The <code>bazel build<\/code> command compiles the entire project (<code>my-project:all<\/code>), while the <code>bazel test<\/code> command runs all the tests associated with the project (<code>my-project:tests<\/code>). By leveraging Bazel, Google can execute millions of builds and tests daily, enabling fast feedback and ensuring that any code changes meet the company\u2019s high standards for quality and performance. This process is essential for maintaining the scalability and reliability of Google\u2019s products, given the vast number of developers working across multiple teams and projects.<\/p>\n\n\n\n<p>Google&#8217;s CI system manages millions of builds and tests daily, leveraging distributed computing resources to maintain code quality across its extensive codebase. The company\u2019s release engineering team manages deployments using canary releases to minimize deployment risks and ensure stability during updates <a href=\"https:\/\/testing.googleblog.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Google Engineering<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-benefits-achieved-1\">Benefits Achieved<\/h3>\n\n\n\n<p>Google&#8217;s CI\/CD practices enable high development velocity, allowing teams to deliver new features and updates frequently. The scalability of their CI\/CD pipeline supports the company\u2019s extensive product portfolio and ensures system reliability, while automated testing and continuous integration practices maintain consistent code quality and reduce the likelihood of production issues <a href=\"https:\/\/testing.googleblog.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Google Blog<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-case-study-4-amazon\">Case Study 4: Amazon<\/h2>\n\n\n\n<p>Amazon, one of the largest e-commerce and cloud computing companies in the world, has adopted CI\/CD practices to support its vast and complex infrastructure. The company\u2019s approach to CI\/CD focuses on automation, scalability, and rapid delivery, allowing it to push code updates frequently across its global platform. Detailed insights into Amazon&#8217;s CI\/CD practices are available in the <a href=\"https:\/\/docs.aws.amazon.com\/whitepapers\/latest\/cicd_for_5g_networks_on_aws\/cicd-on-aws.html\" target=\"_blank\" rel=\"noreferrer noopener\">AWS DevOps CI\/CD Blog<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-implementation-strategy-2\">Implementation Strategy<\/h3>\n\n\n\n<p>Amazon employs a microservices architecture, where each service can be developed, tested, and deployed independently. This architecture allows for high scalability and flexibility, enabling teams to innovate and deploy changes rapidly without affecting the entire system. To manage the CI\/CD pipeline, Amazon uses <a href=\"https:\/\/aws.amazon.com\/codepipeline\/\" target=\"_blank\" rel=\"noreferrer noopener\">AWS CodePipeline<\/a>, a continuous integration and delivery service that automates the build, test, and deploy phases of applications.<\/p>\n\n\n\n<p>Here\u2019s a code snippet that illustrates a simple AWS CodePipeline configuration:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{\n  \"pipeline\": {\n    \"name\": \"MyPipeline\",\n    \"roleArn\": \"arn:aws:iam::123456789012:role\/AWSCodePipelineServiceRole\",\n    \"artifactStore\": {\n      \"type\": \"S3\",\n      \"location\": \"my-pipeline-artifacts\"\n    },\n    \"stages\": [\n      {\n        \"name\": \"Source\",\n        \"actions\": [\n          {\n            \"name\": \"SourceAction\",\n            \"actionTypeId\": {\n              \"category\": \"Source\",\n              \"owner\": \"AWS\",\n              \"provider\": \"S3\",\n              \"version\": \"1\"\n            },\n            \"outputArtifacts\": [\n              {\n                \"name\": \"SourceArtifact\"\n              }\n            ],\n            \"configuration\": {\n              \"S3Bucket\": \"my-source-bucket\",\n              \"S3ObjectKey\": \"source.zip\"\n            }\n          }\n        ]\n      },\n      {\n        \"name\": \"Deploy\",\n        \"actions\": [\n          {\n            \"name\": \"DeployAction\",\n            \"actionTypeId\": {\n              \"category\": \"Deploy\",\n              \"owner\": \"AWS\",\n              \"provider\": \"CodeDeploy\",\n              \"version\": \"1\"\n            },\n            \"inputArtifacts\": [\n              {\n                \"name\": \"SourceArtifact\"\n              }\n            ],\n            \"configuration\": {\n              \"ApplicationName\": \"MyApp\",\n              \"DeploymentGroupName\": \"MyDeploymentGroup\"\n            }\n          }\n        ]\n      }\n    ]\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-explanation-2\">Explanation<\/h3>\n\n\n\n<p>This JSON snippet represents a basic configuration for an <a href=\"https:\/\/aws.amazon.com\/codepipeline\/\" target=\"_blank\" rel=\"noreferrer noopener\">AWS CodePipeline<\/a>. It defines a pipeline that includes a source stage, where the source code is retrieved from an S3 bucket, and a deploy stage, where the application is deployed using <a href=\"https:\/\/aws.amazon.com\/codedeploy\/\" target=\"_blank\" rel=\"noreferrer noopener\">AWS CodeDeploy<\/a>.<\/p>\n\n\n\n<p>This automated pipeline allows Amazon to efficiently manage the deployment of code updates across its global infrastructure, ensuring that changes are tested and deployed quickly and reliably.<\/p>\n\n\n\n<p>Automating the entire CI\/CD process is crucial for Amazon, given the scale at which the company operates and the need to maintain high availability and performance across its services.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-benefits-achieved-2\">Benefits Achieved<\/h3>\n\n\n\n<p>Amazon\u2019s adoption of CI\/CD practices has enabled the company to deploy code changes continuously, reducing the time it takes to deliver new features and fixes to customers. This agility has been key to maintaining Amazon\u2019s competitive advantage in the e-commerce and cloud computing markets. Additionally, the automation of the CI\/CD pipeline has improved code quality and reduced the risk of errors in production, contributing to a more reliable and resilient platform.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-case-study-5-facebook\">Case Study 5: Facebook<\/h2>\n\n\n\n<p>Facebook, one of the world\u2019s largest social media platforms, has implemented CI\/CD practices to support its fast-paced development environment. With millions of users relying on the platform daily, Facebook needs to ensure that updates are rolled out quickly and without disrupting the user experience. Insights into Facebook\u2019s CI\/CD practices can be found in their <a href=\"https:\/\/engineering.fb.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">engineering blog<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-implementation-strategy-3\">Implementation Strategy<\/h3>\n\n\n\n<p>Facebook uses a continuous integration system called <a href=\"https:\/\/secure.phabricator.com\/book\/phabricator\/article\/introduction\/\" target=\"_blank\" rel=\"noreferrer noopener\">Phabricator,<\/a> a suite of open-source tools for code review, repository hosting, and project management. Facebook\u2019s CI\/CD pipeline is designed to handle the vast amount of code changes that are made daily. The company uses a combination of automated testing, code review, and canary releases to ensure that code is thoroughly vetted before it reaches production.<\/p>\n\n\n\n<p>Here\u2019s a code snippet that demonstrates how Facebook might use Phabricator to automate code reviews:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Sample Phabricator code review script\narc diff --create\narc land --hold<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-explanation-3\">Explanation<\/h3>\n\n\n\n<p>This snippet shows how developers at Facebook use Phabricator to manage code reviews. The arc <code>diff --create <\/code>command creates a new code review for the changes made in a local branch. Once the review is completed and approved, the <code>arc land \u2013hold<\/code> command prepares the changes to be merged into the main branch. The <code>--hold<\/code> flag allows developers to wait for additional approval or testing before the changes are finalized. This process ensures that every code change undergoes thorough review and testing, reducing the likelihood of introducing bugs or other issues into production. Facebook\u2019s reliance on such tools helps manage the complexity of their development environment, where multiple teams are working on different parts of the platform simultaneously <a href=\"https:\/\/secure.phabricator.com\/book\/phabricator\/article\/introduction\/\" target=\"_blank\" rel=\"noreferrer noopener\">Phabricator Documentation<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-benefits-achieved-3\">Benefits Achieved<\/h3>\n\n\n\n<p>Through the implementation of CI\/CD, Facebook has significantly increased its deployment frequency, allowing the company to release new features and updates multiple times a day. This continuous delivery model enables Facebook to stay agile and responsive to user needs, maintaining a high level of engagement and satisfaction. The integration of automated testing and code review processes has also contributed to improved code quality, reducing the risk of production issues and enhancing the overall reliability of the platform <a href=\"https:\/\/engineering.fb.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Facebook Engineering<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n\n\n\n<p>The implementation of CI\/CD practices has proven to be a game-changer for many leading organizations, enabling them to maintain a competitive edge in their respective industries. From Netflix&#8217;s seamless deployments and chaos engineering to Etsy&#8217;s rapid release cycles and automated testing, each case study showcases the transformative impact of CI\/CD on software development.<\/p>\n\n\n\n<p>Amazon&#8217;s scalable automation with AWS CodePipeline and Facebook&#8217;s sophisticated code review processes with Phabricator further illustrate the versatility and effectiveness of CI\/CD in managing large-scale and complex development environments. By adopting and refining CI\/CD practices, these companies have not only enhanced their operational efficiency but also improved their ability to respond swiftly to market demands and user needs. As more organizations seek to harness the power of CI\/CD, the lessons learned from these real-world examples offer a roadmap for achieving greater agility, reliability, and innovation in software development.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article covers examples of how some larger companies have successfully implemented CI\/CD practices to transform their development processes. Through these case studies, we will examine strategies employed by Netflix, Etsy, Google, Amazon, and Facebook, highlighting their unique approaches and the benefits they have achieved. These examples provide valuable insights into how CI\/CD can be&#8230;&hellip;<\/p>\n","protected":false},"author":342511,"featured_media":104818,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[143512],"tags":[5970],"coauthors":[159023],"class_list":["post-104817","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","tag-devops"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/104817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/users\/342511"}],"replies":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/comments?post=104817"}],"version-history":[{"count":3,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/104817\/revisions"}],"predecessor-version":[{"id":107305,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/104817\/revisions\/107305"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media\/104818"}],"wp:attachment":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media?parent=104817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/categories?post=104817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/tags?post=104817"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/coauthors?post=104817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}