{"id":179,"date":"2017-07-11T09:52:57","date_gmt":"2017-07-11T13:52:57","guid":{"rendered":"https:\/\/dwan.org\/?p=179"},"modified":"2019-10-25T15:15:54","modified_gmt":"2019-10-25T19:15:54","slug":"the-answer-is-hybrid","status":"publish","type":"post","link":"https:\/\/dwan.org\/index.php\/2017\/07\/11\/the-answer-is-hybrid\/","title":{"rendered":"The answer is &#8220;Hybrid&#8221;"},"content":{"rendered":"<p>\u201cHybrid,\u201d is the answer.<\/p>\n<p>I\u2019m talking about \u201con-prem vs cloud,\u201d the bugaboo trick question that has plagued us for nearly a decade.<\/p>\n<p>What I mean by reframing the question like this is that \u2013 absent other details \u2013 the <i>location<\/i> and <i>ownership<\/i> of servers is much less important than the architecture of the solutions.<\/p>\n<p>So let\u2019s get on with it.  This is more than just philosophy.  We are engineers \u2013 we thrive on specifics:<\/p>\n<p>A colleague of mine likes to say, \u201cssh is cheating.\u201d  What he means is that it is unacceptable, in 2017, to leave your system so incomplete that it requires a human to log in and perform manual configuration in the event of an update or (heavens forfend) a reboot.  Ssh as a protocol is fine (most of the tools below run over that protocol), it\u2019s the manual intervention that constitutes cheating.<\/p>\n<p>System configurations should be defined in software.  It doesn\u2019t really matter which domain specific language we pick, any of <a href=\"https:\/\/www.puppet.com\">Puppet<\/a>, <a href=\"http:\/\/www.chef.io&quot;\">Chef<\/a>, or <a href=\"http:\/\/www.ansible.com\">Ansible<\/a> will work fine.  It <i>is<\/i> important to pick one and get good at it, rather than trying to maintain a polyglot mashup.<\/p>\n<p>Configuration scripts need to be under version control, just like any other software. <a href=\"http:\/\/github.com\">Github<\/a> is the default code repository these days, though there are reasons to go with something slightly more pre-integrated like <a href=\"http:\/\/bitbucket.org\">Bitbucket<\/a>.<\/p>\n<p>Configuration changes should follow a structured process like <a href=\"https:\/\/datasift.github.io\/gitflow\/IntroducingGitFlow.html\">Gitflow<\/a>. It is worth noting that this tool is only helpful if coupled with <i>human<\/i> processes of communication and trust.  Human beings need to check and validate each other\u2019s work, to avoid overwriting or colliding with each other\u2019s changes.<\/p>\n<p>Once a change is checked in and reviewed, continuous integration, test, and deployment is the order of the day.  Tools like <a href=\"https:\/\/jenkins.io\">Jenkins<\/a> remove <i>all<\/i> of the manual interventions between approving a change and seeing the code built, tested, and pushed to production on whatever schedule the team has picked.  Note that this is not an argument for the wild west.  For most teams, most of the time, I\u2019m an advocate of \u201cread only Fridays,\u201d since changes on a Friday frequently lead to long weekends at the keyboard.<\/p>\n<p>All of this is just as true in the on-premises data center as it is in Amazon\u2019s east-coast-2 availability zone.  You don\u2019t get to ignore modern systems engineering practices just because finance negotiated a really killer deal with Dell.<\/p>\n<p>So when someone asks me, \u201con-prem vs cloud,\u201d without further elaboration, I say \u201chybrid.\u201d It\u2019s an answer that allows me to get on with building robust, scalable, agile systems no matter who happens win out as the infrastructure provider.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u201cHybrid,\u201d is the answer. I\u2019m talking about \u201con-prem vs cloud,\u201d the bugaboo trick question that has plagued us for nearly a decade. What I mean by reframing the question like this is that \u2013 absent other details \u2013 the location and ownership of servers is&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-179","post","type-post","status-publish","format-standard","hentry","category-cloud"],"_links":{"self":[{"href":"https:\/\/dwan.org\/index.php\/wp-json\/wp\/v2\/posts\/179","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dwan.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dwan.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dwan.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dwan.org\/index.php\/wp-json\/wp\/v2\/comments?post=179"}],"version-history":[{"count":9,"href":"https:\/\/dwan.org\/index.php\/wp-json\/wp\/v2\/posts\/179\/revisions"}],"predecessor-version":[{"id":1163,"href":"https:\/\/dwan.org\/index.php\/wp-json\/wp\/v2\/posts\/179\/revisions\/1163"}],"wp:attachment":[{"href":"https:\/\/dwan.org\/index.php\/wp-json\/wp\/v2\/media?parent=179"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dwan.org\/index.php\/wp-json\/wp\/v2\/categories?post=179"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dwan.org\/index.php\/wp-json\/wp\/v2\/tags?post=179"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}