{"id":5421,"date":"2019-05-03T17:25:35","date_gmt":"2019-05-03T10:25:35","guid":{"rendered":"http:\/\/54.151.235.32\/?p=5421"},"modified":"2021-03-03T18:00:27","modified_gmt":"2021-03-03T11:00:27","slug":"whats-the-value-of-ci-cd","status":"publish","type":"post","link":"https:\/\/renovacloud.com\/en\/whats-the-value-of-ci-cd\/","title":{"rendered":"WHAT\u2019S THE VALUE OF CI\/CD?"},"content":{"rendered":"<p><strong>There are two questions you should ask before shipping software:<\/strong><\/p>\n<ul>\n<li><strong>Are we able to ship?<\/strong><\/li>\n<li><strong>Should we\u00a0ship?<\/strong><\/li>\n<\/ul>\n<p><strong>\u201cShould we ship?\u201d Is a business driven decision. Is it valuable to your business to put this latest feature into your users hands?\u00a0 Your product manager represents the business interests on the team and should take this decision.<\/strong><\/p>\n<p>But for the question \u201cAre we able to ship\u201d, it is fundamentally a technical question. Is the software working?<\/p>\n<p>Are we confident it won\u2019t fail in production? The goal of the team engineers is to make sure they can and fully answer a \u201cyes\u201d to this question. In a nutshell, if your team cannot ship, it&#8217;s hard to learn.\u00a0And the longer you\u2019re not learning, the greater the risk that you\u2019re wasting time and money building the wrong\u00a0thing.<\/p>\n<p>To be able to always have a &#8220;yes&#8221; to &#8220;Are we able to ship&#8221;, here are two practices to make it easy:<\/p>\n<ul>\n<li>Stories<\/li>\n<li>Continuous Integration<\/li>\n<\/ul>\n<h2>Stories<\/h2>\n<p>What\u2019s a\u00a0story? It\u2019s a little description of how a user interacts with the system. It\u2019s the smallest piece of user value that you can put in front of users to learn from. You believe that the feature described in the story,\u00a0<em>on its own<\/em>, provides value to users. It can\u2019t be demoware or vaporware. It has to be real.<\/p>\n<p>It doesn\u2019t need to be a lot \u2014 just enough to test your\u00a0belief.<\/p>\n<p>Any pair, on any pairing station, at any time, can run the tests to determine if their copy of the code works \u2014 if all of the features of the product work correctly. But on a big team, you have lots of pairs working in parallel, and therefore the codebase exists in multiple states simultaneously; the tests might be passing on one pairing station, but failing on another.<\/p>\n<p>Teams that practice Extreme Programming (XP) believe that the best software is built through a process of learning, which requires them to continuously deliver software into the hands of users, get their feedback, and iterate on the product in response to that. Consider these two graphs of team speed over time, and ask yourself which team you want to be on:<img loading=\"lazy\" decoding=\"async\" class=\" wp-image-5413 aligncenter\" src=\"http:\/\/renovacloud.com\/wp-content\/uploads\/2019\/05\/Picture1-300x150.png\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" srcset=\"http:\/\/renovacloud.com\/wp-content\/uploads\/2019\/05\/Picture1-300x150.png 300w, http:\/\/renovacloud.com\/wp-content\/uploads\/2019\/05\/Picture1-768x384.png 768w, http:\/\/renovacloud.com\/wp-content\/uploads\/2019\/05\/Picture1-1024x512.png 1024w, http:\/\/renovacloud.com\/wp-content\/uploads\/2019\/05\/Picture1.png 1054w\" alt=\"\" width=\"660\" height=\"330\" \/><\/p>\n<p>You can\u2019t do that if you\u2019re on that first curve. You need the second curve. You need to GO FAST FOREVER. There\u2019s lots of reasons a team slows down. But there\u2019s one thing that will always slow a team down: bad code.<\/p>\n<h2>Continuous integration<\/h2>\n<p>That\u2019s where we get to\u00a0continuous integration\u00a0(CI): the team needs a single source of truth that they can point to in order to answer the question \u201cdoes it work?\u201d Every time a pair pushes up their code, a new CI build gets triggered. And if the CI build is green, it works. You\u00a0<em>can<\/em>\u00a0ship the software. Now the PM has to decide if the team should\u00a0ship the software. It\u2019s worth noting that some PMs automate their decision with respect to shipping. Some always have the default answer: \u201cShip on green.\u201d<\/p>\n<p>In effect, they\u2019ve asked the engineers to add another step to their build pipeline to automatically promote code to production on a green build. That\u2019s called \u201ccontinuous deployment.\u201d However, although the mechanics of it are facilitated by engineers, shipping is still a business responsibility. The default answer of \u201cship on green\u201d doesn\u2019t abdicate the responsibility of the decision to the engineers.<\/p>\n<p>The PM still has the responsibility of understanding how the features are working in production and how users are responding to it, which means the PM has to prioritize all of the engineering work necessary to build automated production monitoring capabilities that make continuous deployment\u00a0<em>Responsible.<\/em><\/p>\n<p><em>(Source: builttoadapt.io &amp;\u00a0content.pivotal.io)<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>There are two questions you should ask before shipping software: Are we able to ship? Should we\u00a0ship? \u201cShould we ship?\u201d Is a business driven decision. Is it valuable to your business to put this latest feature into your users hands?\u00a0 Your product manager represents the business interests on the team and should take this decision. [&#8230;]\n","protected":false},"author":7,"featured_media":5418,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[131,132],"class_list":["post-5421","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-and-analytics","tag-continuous-integration-ci","tag-value-of-ci-cd"],"_links":{"self":[{"href":"https:\/\/renovacloud.com\/en\/wp-json\/wp\/v2\/posts\/5421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/renovacloud.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/renovacloud.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/renovacloud.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/renovacloud.com\/en\/wp-json\/wp\/v2\/comments?post=5421"}],"version-history":[{"count":0,"href":"https:\/\/renovacloud.com\/en\/wp-json\/wp\/v2\/posts\/5421\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/renovacloud.com\/en\/wp-json\/wp\/v2\/media\/5418"}],"wp:attachment":[{"href":"https:\/\/renovacloud.com\/en\/wp-json\/wp\/v2\/media?parent=5421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/renovacloud.com\/en\/wp-json\/wp\/v2\/categories?post=5421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/renovacloud.com\/en\/wp-json\/wp\/v2\/tags?post=5421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}