{"id":6080,"date":"2019-06-20T07:23:53","date_gmt":"2019-06-20T07:23:53","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=6080"},"modified":"2019-06-20T07:25:34","modified_gmt":"2019-06-20T07:25:34","slug":"understanding-a-world-of-devops-from-richard-seroter","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/understanding-a-world-of-devops-from-richard-seroter\/","title":{"rendered":"Understanding a world of DevOps from Richard Seroter"},"content":{"rendered":"\n<h2><strong>Introduction and Goals<\/strong><\/h2>\n<p>Hi, my name is Richard Seroter and welcome to this course on  DevOps. We&#8217;re going to be covering the Big Picture of DevOps, hence the title,  really cover what does it mean, what&#8217;s it all about. For me, I&#8217;m the Director  of Product Management for a leading cloud provider, CenturyLink, a book author,  blogger, frequent trainer for Pluralsight, and a public speaker. So what&#8217;s the  point of this course? Really it&#8217;s to get an understanding of what DevOps is,  what are the principles behind it? How do you realize the actual benefits of  it? What are the objections to it from outside parties or even yourself? What  are some strategies for implementing this within an organization adopting some  of those technologies? So we&#8217;ll talk about strategy, we&#8217;ll talk about  technology together in a relatively brief course to give you a real good  introduction. Whether you&#8217;re a Developer, Architect, System Administrator, CIO,  Project Manager or Business Analyst, really anyone in a technology function  there should be something for you here as you try to understand the impact of  something like DevOps on your role in an organization. To some extent DevOps  feels like the new cloud. Everybody&#8217;s talking about it, but what is it really?  Is it just a rebranding of things we had before? Is it a fad? Is it a set of  technologies, a cultural thing? We&#8217;re going to try to get to the bottom of  that.<\/p>\n<p><strong>Organization Characteristics<\/strong><\/p>\n<p>Throughout the course we&#8217;re going to talk about a fictitious  company called Globomatics to just give us an anchor point when we&#8217;re talking  about different principles. This represents a typical enterprise, but it&#8217;s  still going to be relatable. If you work for a small company, large company,  global company, it&#8217;ll give you some frame of reference as we&#8217;re talking about  some of the pain points that you feel in a large company, as well as some of  the ways you can start to transform an organization. We&#8217;re going to take some  time and talk about this company. What&#8217;s its organization structure? What does  some of its software delivery pipeline look like? Just give us a sense for what  this looks like. So we have some frame of reference to consider as we look at  where DevOps transformation can make a difference. If you look at their  organization structure, a pretty typical breakdown of business units, various  units like R&amp;D and Finance, HR. IT is sitting in the middle. I&#8217;m personally  not a fan of this discussion of IT and the business, as two sort of distinctions  within an organization. It&#8217;s like Human Resources isn&#8217;t typically the business  of a company any more than IT is. It&#8217;s important to think of these things as  all different business units in a company, but in this case, IT often being  seen as a centralized thing that everyone else uses. If we double-click on that  and jump into what IT looks like, this probably looks familiar to you in your  own organization where you have some Architects in your organization, maybe  Business Architects, Enterprise Architects, Application Architects, Data  Architects. You&#8217;ve got Developers with different expertise levels. You&#8217;ve got  Testers, you probably have a Quality Department, some sort of Project  Management. Business Analysts who do some of your requirements work. Information  Security and Compliance depending on the industry you&#8217;re in. People who  function as system owners after a project becomes a system and they maintain  its life cycle. And you may have centers of excellence where there&#8217;s a distinct  set of capabilities that are carved into unique teams for things like  application integration, collaboration and content management, ERP, things that  have a designated set of people wrapped around them and they often get farmed  out or they simply manage their collective resources in that center of  excellence. You also probably see that some of these business units, whether it  would be in the previous example things like Finance or R&amp;D, might have  their own mini IT organizations, sometimes called shadow IT where you&#8217;re doing  things outside of the purview of the centralized IT Team, but often you have  representations just like this, of things like architecture and analysis and  project management. So let&#8217;s talk a little bit about the company. So if you  look at their software delivery pipeline, complex, their silos across the  organization, just because you&#8217;re delivering systems and software and  applications. I think we all know that doesn&#8217;t mean that they&#8217;re an  independent, they&#8217;re connected teams rather. Instead they&#8217;re often very independent  silo teams with their own policies and procedures surrounding their stage of  the deployment pipeline. There can be compliance policies, infrastructure  acquisition policies, lots of hand offs, lots of teams inherently involved in  delivering a product or service to an end user. Most established organizations  also have this sort of COTS versus CUSTOM, COTS being Commercial Off The Shelf  software where you purchase a lot of applications. If you&#8217;re like most  enterprises you don&#8217;t leave well enough alone with those, you often actually do  a lot of customization of COTS platforms. Just because you bought something  like Dynamics CRM, you probably still customized the daylights out of it to  meet your &quot;special needs&quot; in your organization. So a lot of the time even  COTS software looks like custom. But you do sometimes have even some completely  custom apps, often within the business units themselves to solve some unique or  unmet needs. But this is a typical part, again, of most organizations where you  do have this dichotomy of not entirely customs apps that just fit on any sort  of platform, not just commercial software that has a particular license and  deployment model. It&#8217;s very unique, mixed environments. Globomatics, probably  just like most organizations, have project teams that leave after deployment.  So after the software has been deployed the project is &quot;done.&quot; You  may have a skeleton crew or even a single system owner left, Developers,  Testers, Project Managers, all go on to new projects. Operations may kind of  remain because there&#8217;s going to be steady state, but the app becomes one of  many that they maintain. Source control and probably outdated specifications  get left behind, but any of the knowhow or custom tools built to deliver the  solution, typically not. So, this is typical of most enterprise IT orgs who  have a shared, centralized IT organization that delivers services, where after  deployment the project is really considered done, even though the system is now  going to go on and live for years and sometimes even decades.<\/p>\n<p><strong>Organizational Pain<\/strong><\/p>\n<p>With that in mind as we think about the organization, let&#8217;s  talk about some of the example pain the company is feeling. Pain that you  probably feel in your own organization, as you&#8217;re faced with the sort of  complex software delivery pipelines in these siloed organizations. There are  often just painful outages. Outages occurring on high-priority systems, a slow  recovery. Instead of constantly trying to make applications that don&#8217;t fail, is  really switching the focus to applications that can recover from failure  quickly. So few system are bulletproof. So when an issue occurs a panic can  ensue. Where are the people who know the system? We just talked about how teams  typically disperse after a project is complete. So what about when the system  is running, who knows it? What&#8217;s the impact? Who needs to be involved as part  of any decision making process? Often as you have these sort of teams that have  to now quickly come together, people who don&#8217;t have expertise on it, it creates  a bit of chaos. This can even happen after a project has just deployed and the  Project Team even is still around as you&#8217;ve still got this sort of panic of who  does what. So what happens? Well, it&#8217;s a black eye for IT. It&#8217;s lost trust by  the end users, it can IT deliver systems. It&#8217;s often finger pointing among the  Project Team or the various silos who have a piece of the pipeline of the  deployment or even of the system ownership. You&#8217;re seeing less incremental  value in a lot of these companies where instead of these massive, multiyear  projects that constantly miss budgets, miss timelines, CIOs and CEOs are really  trying to realize that speed&#8217;s a competitive advantage. You&#8217;ve got to deliver  value faster. We&#8217;re all used to getting buffering pages and things like that  and while, sometimes that can be annoying, it&#8217;s great that I can start watching  a movie before it&#8217;s done. I&#8217;m getting some incremental value even though I  haven&#8217;t downloaded the whole resource yet. Many IT projects and enterprise IT  orgs have these very long windows and if you&#8217;re not shipping it in a way that  delivers value along the way, you&#8217;re waiting two to three years often and the  original business objective has changed by the time you&#8217;ve actually delivered  any value. There&#8217;s this new class of responsive, mobile, different apps where  speed is of the essence. There&#8217;s no time for these long delays. And IT Ops  Teams are responsible for more and more assets, often without an increase in  the head count. So, you&#8217;ve got these multiyear projects that are getting shrunk  down to something smaller that can deliver value, but Ops Teams are continued  to be pressed to try to make things work in their existing pipelines with their  existing teams, so a lot of tension there to make that work right. There&#8217;s simply  the perception, at least of slow IT. Frustrated business users and different  department users can&#8217;t get help from that other business unit called IT. They  can&#8217;t get systems as fast as they need. They end up looking to outsiders for  help and that&#8217;s where cloud computing has taken off, where people with a credit  card can stand up a software as a service CRM application. They can work with  outside developers and deploy the cloud infrastructure. It&#8217;s now easier than  ever to go around IT. So, central IT at a company like Globomatics is simply  solidifying their reputation as a laggard, who impedes progress, doesn&#8217;t enable  it. And this is across teams. It&#8217;s Ops for not getting resources fast enough  and waiting weeks to get servers and taking forever to deploy code that&#8217;s been  sitting ready to go for weeks. Information Security, who says no to everything  new. Testers and QA for missing critical issues gets a bad reputation, even  Developers for unreliable shipments and slow progress. So all of IT kind of  gets blasted with this poor performance label and it&#8217;s tough to come back from  that. So organizations&#8217; different departments end up looking at one-off cloud  solutions, or departmental solutions that outside consultants deliver. It&#8217;s a  challenge for most organizations, like our fictitious example here. And a lot  of that simply leads to the infighting. It&#8217;s this increasingly toxic culture of  us versus them between the IT and some of the end users. IT Teams don&#8217;t  collaborate themselves and treating IT as separate from the business isn&#8217;t good  either. Where you start to get this sort of us versus them or calling other  users the clients, that really creates this weird, disconnected relationship.  Instead of treating it as every team together, it&#8217;s every team for itself. There&#8217;s  very little transparency, even less trust between some of the IT Teams  themselves. So you&#8217;re not getting a good relationship between IT and some of  the other parts of the business, and within IT itself you have the challenge.  And sometimes this even based on rewards, the classic example of a VP of  Development and Engineering who might be getting bonuses and incentives based  on how much did they ship code and what kind of features can they get out  there. And so their motivation is to push as much as I can. But then you&#8217;ve got  an Engineering or Ops Team who is incented by stability and high availability  and they&#8217;re motived to stop any deployments because they want to maintain  something stable. You&#8217;ve got infighting between different competing interests and  different compensation models.<\/p>\n<p><strong>Identifying Waste<\/strong><\/p>\n<p>So one of the things you see in organizations like this and  a lot of organizations is just this heavy waste and it&#8217;s either the result or  cause of, depending on your perspective, of Globomatics&#8217; problems. You can  argue waste could be the cause of some of these problems or that it&#8217;s the  result of some of these relationships, but the key is it&#8217;s wasted opportunities  for revenue, wasted time on non-value-added activities and more. So it&#8217;s really  improvement as you&#8217;re looking at waste to name and shame the waste. What are  the specific ones we&#8217;re talking about? Really waste being anything that doesn&#8217;t  add value to the client. Anything the customer wouldn&#8217;t pay for. So let&#8217;s talk  through a few of the different types of waste and examples of those that you  see in a typical IT Department. There&#8217;s knowledge waste. What causes this? This  is when you&#8217;re disrupting the flow of knowledge, you&#8217;re disrupting absorption  of knowledge. Marketing may know something and not tell Engineering.  Engineering doesn&#8217;t share something with Marketing. Operations and Development  not talking. You&#8217;re disrupting the flow and this could be because of physical  barriers, it could be through reorganizations where data gets lost as teams constantly  reshuffle. It can be different professions that aren&#8217;t talking to each other,  different disciplines where QA or Testers aren&#8217;t communicating well with  Project Management. It can even be software systems that don&#8217;t talk and you&#8217;ve  got this manual data entry where knowledge isn&#8217;t getting in-between the  systems. It even can just disrupt the absorption. You&#8217;ve got constant review  meetings where people simply start to tune out and they don&#8217;t absorb what&#8217;s  important because they&#8217;re in so many other useless meetings. Complex reports,  complex specifications where it&#8217;s surrounded by so much other fluff, you&#8217;re  actually losing some of the core knowledge by people not absorbing what  matters. So knowledge waste is a big problem when you&#8217;re losing key information,  teams don&#8217;t have the knowledge they need to maintain systems and you can  imagine the results of some of those things. It&#8217;s more time to get systems back  online because you don&#8217;t know what&#8217;s going on. Or even to make changes, you&#8217;re  terrified to make changes to a system because any of the core knowledge no  longer exists anywhere in a visible place. Waiting waste, we&#8217;re all familiar  with these. I&#8217;ve yet to meet anybody who doesn&#8217;t have some sort of waiting  waste in their organization. You&#8217;re waiting for environments to be created or  updated if you&#8217;re a Developer. You&#8217;re waiting for code to finish so you can  test it when you&#8217;re in a Test Team. You&#8217;re waiting for approvals before you&#8217;re  allowed to make changes. Customers waiting, internal teams waiting, teams on  the same project waiting. Waiting waste is a huge problem and when you realize  how much time you spend on it, clearly it&#8217;s a great area of focus for how can I  eliminate this and add some significant value. Another type of waste is called  over-production waste. This is the idea of producing more of a product than  necessary. So I&#8217;m asking for more capacity than I need, just so I don&#8217;t have to  go back again for example. How many times have you requested a super big,  physical or virtual machine because you knew asking to go back later and ask  for more of capacity was just going to be too much work. And so it&#8217;s easier to  ask for more than you need. It&#8217;s wasteful, but sometimes because of the way the  system is set up you&#8217;re incented to over produce. Sometimes you over produced  just to keep people busy. To make sure that hey, it looks like we&#8217;re busy so  we&#8217;re going to produce more than we need. Another type of waste is over  processing. Simply doing more work than is necessary. I hate opening Microsoft  Office software at some point, because it was so complicated. You just simply  did way more than you needed to do. Other examples, exceeding the  specification, right? If I&#8217;m doing more than I had to, excess capabilities,  gold plating things. It wasn&#8217;t necessary. We know, I think within software most  people realize that most features don&#8217;t get used and so sometimes not having  that focus and you&#8217;re simply over processing. And doing more than you need to  do for an individual feature than you should&#8217;ve is wasteful. Entering data more  than once is this sort of over-processing waste. All of these sort of things,  again, as you think about them you realize and you can identify them and these  become an easier source of efficiencies. When you know that this is what this  is, let&#8217;s get rid of it. There&#8217;s motion waste. This is the toll on people who  create the product. So the long nights pushing software, is motion waste. As  you&#8217;re wearing out your staff of people who are staying up for six hours to  update software. Repetitive, manual testing where you have hundred page  documents you have to run through every time there&#8217;s a code change. You&#8217;re  killing your team when they&#8217;re doing that sort of thing. These are ergonomic  problems, fatigue problems, you have less capacity, a less able team. It&#8217;s the  waste of excess motion to create the product, service, software that IT is  trying to deliver. We&#8217;ve got the idea of transportation waste. This is the  waste of moving the product in ways that add no value. Clumsy movement of code  between environments is a transportation waste. I&#8217;m packaging it up and zipping  it and moving it out to this server and unpacking it. I&#8217;m sliding things  between different environments when I didn&#8217;t have to. Any of these sort of  moving costs, it&#8217;s lost time, you&#8217;re misdirecting it, you could ruin something  in transit. Maybe as I&#8217;m moving from environment to environment I forgot to  grab a certain config and I didn&#8217;t get that into the next environment. It&#8217;s the  waste that happens while moving things around, especially unnecessarily.  There&#8217;s the waste of having to fix defects, in this case having a stair to  nowhere. I mean I&#8217;m rushing to hit a deadline so one team could say success,  but another is stuck with subpar deliverables. How many times are Development  Teams incented to ship, not necessarily incented to ship well? And so this  happens when there&#8217;s just too little emphasis placed on prevention, acceptable  quality limit is okay. You&#8217;re allowed to have a certain amount of defect that&#8217;s  actually pretty significant. And we&#8217;ll talk more about building in quality from  day one, but if you&#8217;re just inspecting things on the way out and that&#8217;s your  way of doing quality assurance, your process is wrong. It should be quality  built-in from the front, not just by random check at the end. And then finally  there&#8217;s an inventory waste. It&#8217;s those things that pile up that actually aren&#8217;t  producing income. And you might think digital assets don&#8217;t really apply here,  this is more of a manufacturing concept, where I&#8217;ve got stuff sitting in a  warehouse not making me money, that&#8217;s a clear inventory waste. But don&#8217;t we  have the same thing in IT? I&#8217;ve got code that&#8217;s waiting to be shipped that  could be adding value to my users and it&#8217;s sitting here in the source control  repository or it&#8217;s sitting on a staging server and I can&#8217;t push to production  because of one of the other wastes we talked about. Maybe I&#8217;m waiting or what  have you. But having that sit in inventory, I might be losing revenue. I might  be losing something that&#8217;s material to the business because my digital assets  are backed up and they&#8217;re not being delivered, they&#8217;re sitting in inventory.<\/p>\n<p><strong>Introducing DevOps<\/strong><\/p>\n<p>So with all that set up let&#8217;s talk about DevOps now. We&#8217;ve  talked about some of these pain points, we&#8217;ve talked about the wastes. Let&#8217;s  talk about what DevOps is and how can DevOps help someone like Globomatics and  then obviously hopefully you as well. So the whole goal is adding value and  improving flow. How can I deliver more customer value by improving the flow  throughout my organization and reducing waste? Recognizing some shared pain and  trying to collectively improve some of that flow so that, frankly, I can make  more money for my company. That&#8217;s really the point. The point is how can I add  value, typically revenue, money, financial impact to my organization? If we  take a step back and think about Lean, this is something that you&#8217;ll see in a  manufacturing space and worthy of much more than a slide, but if we quickly  talk about what Lean really means it&#8217;ll set things up for DevOps. So, in Lean,  you&#8217;re focusing on customer value. The goal of Lean isn&#8217;t to cut costs, it&#8217;s to  free up resources so you can actually focus on adding value. Significant  attention on time being a very important thing, but being make sure I&#8217;m freeing  up time to deliver value. It&#8217;s about eliminating waste. It&#8217;s working  systematically to get rid of any non-value-added process. So I&#8217;m achieving  these goals with the least amount of effort and waste. It&#8217;s really a key part  of what Lean means in manufacturing. Cycle times, reducing cycle time, how long  work takes to accomplish is a cycle time. How do I shrink that so that I&#8217;m able  to accomplish work faster? In software this can be something. How long does it  take to actually ship software and to deliver software from feature to  deployment? Really the philosophy here, I mean reducing that time from the  customer order and manufacturing to delivery by eliminating any of the sources  of waste in that production flow. Shared learning is a big part of it,  continuous incremental improvement. It&#8217;s sharing information, it&#8217;s sharing  across teams, not having lone experts or siloed knowledge, but actually  collectively learning together. Avoiding batching. This is concepts of work  being pulled, not pushed. I&#8217;m not pushing it to each thing where it piles up,  but instead having an efficient process where I&#8217;m only pulling work when I&#8217;m  ready for it and what I need. So I avoid batching work, moving it from piece to  piece. I&#8217;m thinking of the flow of the system so that things are really hitting  each stage when they need to. I don&#8217;t do things before they&#8217;re required by the  next step. And then finally the theory of constraints. Really the idea here of  finding bottlenecks, not trying to improve the whole system, but going from  constraint to constraint. I can only go as fast in my system as my constraints.  It&#8217;s great, if I try to optimize other stuff I guess, but if that constraint,  that bottleneck is keeping me from doing something, optimization elsewhere  doesn&#8217;t really make an impact. I can only go as fast as my bottleneck. So  secondly, you try to exploit that constraint. Get as much out of it as you can.  Subordinate every other decision to that constraint, get everyone else on  board. And finally, elevate it. Even throw more resources or capacity if none  of those other things have worked. So that&#8217;s a quick look at one Lean is. There  are courses on this. Obviously there&#8217;s a whole discipline on really adopting  Lean. But why does this matter in a DevOps discussion? Mainly from the  principle, Gene Kim is a great thought leader in the space of DevOps, but  &quot;IT is the factory floor of this century&quot; was a recent quote of his  in a Wall Street Journal article. But that&#8217;s a big thing, it&#8217;s not just for  manufacturing companies, this concept of Lean. IT is increasingly how all  business acquires customers and delivers value to them, is what Gene said. So,  in his words, DevOps is the result of implementing Lean principles to the IT  value stream. How am I shortening lead time? Reducing the friction between Dev  and Ops? How am I doing those things we just talked about with Lean? Increasing  the cycle time or reducing the cycle time rather. Removing waste, doing those  sort of things, shared learning, all of those are key in Lean and DevOps is  really Lean for IT. Super-smart DevOps guy John Willis explained DevOps with  this CAMS acronym, Culture Automation Monitoring and Sharing. Really the idea  of thinking of DevOps is a cultural movement that aligns people, processes,  tech, towards a common goal of eliminating waste and increasing value. That&#8217;s  what DevOps is. DevOps isn&#8217;t a product someone&#8217;s going to sell you, DevOps  isn&#8217;t an edict from a CIO who says we&#8217;re doing DevOps now. DevOps isn&#8217;t a new  team that&#8217;s going to go ahead and run around and automate things. DevOps is a fundamental  cultural change, but also with some accompanying technologies. So, I mean the  culture piece, people process has to be there first, right? If you don&#8217;t have  the culture your automation is minimal impact, it might even be fruitless at  the end of the day because you&#8217;re simply not going to deliver to the core  principles. But automation is huge. Once you&#8217;ve been able to get your culture  in line, then you can start to actually use tools to build together a DevOps  capability from an automation standpoint and actually realizing the real value  of some of those principles. Measurement is huge. The old saying, if you can&#8217;t  measure it you can&#8217;t improve it. And so, in good DevOps you really do measure  so that you can do continuous improvement, so you can do shared understanding  of the health of your pipeline and your project. Sharing is huge. Sharing is  about really having true feedback loops, not just Dev telling Ops things, not  just Dev telling others, it&#8217;s Ops being able to feedback to Development. It&#8217;s all  of the organizations, having a way to share information to improve things. And  so that&#8217;s a huge part where I am sharing ideas. Where other organizations are  sharing their pain, so everyone can collectively feel it. Why does all this  matter? Why does DevOps matter? These surveys, you look at the Puppet Labs  recently did a state of DevOps survey and others, where you&#8217;re seeing that  DevOps Teams and organizations that adopt DevOps spend less time putting out  fires, more time on customer tickets and actually addressing pain points. Much  faster at recovering from failures, which if you assume they&#8217;re inevitable,  that&#8217;s huge. Even improving the company valuation, that companies are more  valuable. You can make some inferences from these surveys, because of this sort  of capability. And just even higher job satisfaction. People are happier in  these environments because they are realizing value faster. There&#8217;s a better  culture of learning and sharing and collaboration, not of silos and  head-butting. So, the goal is to make companies more money, if you&#8217;re in any  team that isn&#8217;t the one generating the revenue for the company. And so as I  look at DevOps, the real reason you should care about this is because it is  something that many organizations are adopting. It can make a huge difference  within an organization because you can spend more time on value-added  activities.<\/p>\n<p><strong>Summary<\/strong><\/p>\n<p>So I want to start down the journey, let&#8217;s talk about this.  Over the next couple of modules we&#8217;re going to go through this journey and talk  about a bit of an action plan for how Globomatics, or you, tackle this. First  we&#8217;re going to talk about the cultural changes, organizational changes, common  objections you&#8217;re going to hear from this. Then the final, third module we&#8217;re  going to talk about automation portion. We&#8217;re going to review the real DevOps  tool chain, what you should be exploring, what you should be adopting. Why do  some of those matter? I&#8217;d be hard pressed to come up with any organization that  wouldn&#8217;t benefit from some of this. Even if you disagree or think there&#8217;s no  way this can actually work at your organization or for your client, if you&#8217;re a  consultant, I encourage you to take this next hour or so, challenge that  assumption. If you still disagree I&#8217;d love to hear about it. This is an  emerging space. Every single day I see new news, new interesting ideas, new  angles coming up on this. Lots to explore, you&#8217;re never done in a process like  this this is just a never-ending journey in general to continue to continuously  improve. But there&#8217;s a lot of thinking going on in this space and I would love  to hear back from you on your thoughts. Let&#8217;s get going.<\/p>\n<h2>Making a DevOps Transition<\/h2>\n<p><strong>Introduction<\/strong><\/p>\n<p>My name is Richard Seroter. Welcome to this second module on  the course on DevOps, the Big Picture. The goal of this module is to talk about  some of the cultural organizational considerations for adopting a DevOps  mindset. So, what do you really need to do set the foundation to properly use  technology to actually enact change in an organization? In our last module we  really discussed how, to some extent, speed and reliability and things like  that that are a competitive advantage. And many organizations struggle with the  results of a siloed organization. You end up with waste, you end up with  inefficiencies. So, we talked about a fictitious company, Globomatics, and the  pain and waste that they faced. We then talked a bit about Lean and DevOps as a  way to focus IT on delivering value, kind of setting up this conversation.<\/p>\n<p><strong>Change Culture<\/strong><\/p>\n<p>So we&#8217;re going to cover three things. Virtually changing  culture, is the first one I&#8217;m going to talk about. We talked in the last module  about CAMS, the acronym about Culture, Automation, Monitoring, Sharing. And  that was an acronym I pointed out and so we&#8217;re going to focus a lot of the  Culture one here, as well as some of the Sharing in this first piece. Again,  what does that mean when we&#8217;re talking DevOps?<\/p>\n<p><strong>Change Culture: Start With Why<\/strong><\/p>\n<p>First you start with why. You reestablish the purpose. What  are the shared objectives of the organization? Sometimes that seem really  trivial, but does everyone have a shared goal? Can everyone feel a shared pain?  Whether it&#8217;s Globomatics or your company, are you able to detect those values  and make sure that, just because a Development Team might be feeling pain, does  Operations feel it? Does another business unit feel it? Is there a shared  objective? Is everyone trying to chase the same thing? Or is everyone measured  and compensated and chasing different objectives in the organization? So what  are those values? And if you&#8217;re doing it in Agile Development for example, you  can&#8217;t just do things because a book says to do it a certain way. Your values  map to that. Do you value hitting dates over quality? Do you value a success of  a silo versus collective? Do you think staff is interchangeable and easily  replaceable? If either, if so, you either have to change your values or give up  the effort. Right? There&#8217;s got to be something where underlying, you really  value the thing that DevOps means or else what&#8217;s the point? Likewise, you also  have to value what your organization is chasing or else you&#8217;re never going to  achieve that sort of shared success.<\/p>\n<p><strong>Change Culture: Empowerment<\/strong><\/p>\n<p>One of the first characteristics you&#8217;re looking when you&#8217;re  changing the culture is empowerment. Am I empowering employees to do what&#8217;s  needed to maintain the service? At any point, can Developers or Engineers stop  the alarm, sound the alarm, stop. Say, you know what? We&#8217;re going to stop  delivery. This isn&#8217;t of the quality I expect. Or, I see an issue. Can they do  that without getting yelled out or fear of speaking up? Are they empowered? Can  you trust the team? You have to let them take some ownership. And that&#8217;s really  a lot of this, is empowering individual groups. No more victims, no more, hey I  couldn&#8217;t do it because this other group didn&#8217;t let me. Instead, you empower  teams to form in a crisis, use their judgment, do those sorts of things that  you&#8217;re hiring high-quality technology professionals to do.<\/p>\n<p><strong>Change Culture: Accountability<\/strong><\/p>\n<p>Along with that though, you have accountability. If you mess  up, you&#8217;ve got to take ownership of that. You can&#8217;t really have empowerment  without accountability and so you hold teams accountable for the product, the  project, the entire service success. There&#8217;s a composite team that maintains  collective responsibility and accountability. And a lot of this is a focus on  quality. And that&#8217;s a big part of Lean and that sort of mindset, is your focus  on quality from the beginning. You&#8217;re building this in from the start as well.  You&#8217;re not relying on a QA or even a Testing Team to inspect and catch defects,  you&#8217;re investing in that upfront and you&#8217;re making Developers accountable for  delivering good code. You&#8217;re making Operations accountable for all the various  environments. Whether it&#8217;s Dev, Test, or Prod, you own those things. Take an  ownership of it. It involves that sort of commitment to excellence. You have to  embody and protect it. The team has to be accountable to each other as well,  where there&#8217;s actually a shared social pressure to step up and deliver and be  accountable and call out bad form or call out some mistake. Because everyone&#8217;s  accountable together for this and individually, you also are taking some  ownership. And it comes down also to rewarding those who deliver or take  responsibility. As a manager in an organization, you&#8217;re rewarding people for shipping,  for execution, for stepping up and fixing a problem, not just for coming up  with ideas.<\/p>\n<p><strong>Change Culture: Teamwork<\/strong><\/p>\n<p>Teamwork is a huge part of the cultural aspect of what it  really means to be doing DevOps. This is across teams, this isn&#8217;t one team does  a nice job. This is Development, Project Management, Operations, Testing, QA,  all working together both in quiet time and in crisis. So this isn&#8217;t, we&#8217;re a  great team when we all have to shove a project over the finish line over a  weekend. It is, we work together at all times and we work together when there&#8217;s  something bad and something great. As a team, and as a manager, and as an  individual you&#8217;re looking for excuses to put the team together for planning  efforts, for daily standups or things like that. Brown Bags, where an  Operations Team may explain some new hardware they&#8217;re putting in or some new  layout, educating the Development staff of some of those implications that  their code may have. Developers may walk the rest of the IT Organization through  a new platform feature or a project they&#8217;ve launched or a service that they&#8217;re  maintaining. Take lunch breaks together, even as a Developer, grab an  Operations person for lunch and catch up on them. Who are they? What&#8217;s going  on? Co-mingle. Really, by doing this you start to respect each other&#8217;s skill  set and realize that they bring unique value to the table. So it&#8217;s not just us  versus them within IT. It&#8217;s truly a, we all have some different skills and  there&#8217;s actually a lot of value in this. And we aren&#8217;t just, hey it&#8217;s their  fault, it&#8217;s your fault. Instead, it&#8217;s collaborative. What that means is that  things shouldn&#8217;t break down then when emergencies happen. Teams can quickly  come together. It&#8217;s a natural formation of teams, because now you&#8217;ve already formed  this. If something goes wrong, it&#8217;s really easy to use that previous  collaboration and some of that deep relationship to actually bring a team  together.<\/p>\n<p><strong>Change Culture: Learning<\/strong><\/p>\n<p>Learning, continuous improvement is a huge part of what it  really means to be doing DevOps and that culture is important. As an  organization, if you&#8217;re not valuing learning, if people are expected to truly  just learn things on their free time and if they happen to pick up a new skill  that&#8217;s not acknowledged, that&#8217;s an issue. Because really, you want people to be  sharing their knowledge as they learn it. At my own company we do Brown Bags  with new technologies, both on the Dev and Infrastructure side. Ops Team will  go share something new that they&#8217;re looking at. Developers, the same. It&#8217;s all  optional, but really, there&#8217;s great attendance on both sides because there&#8217;s  curiosity and we realize both teams are doing things interesting. Doing  postmortems when things go wrong. So instead of shying away when something  fails and everyone kind of quietly not talking about it, embrace that as a  learning opportunity. Invite a broad audience. Learn from what you did so it  doesn&#8217;t happen again. You have to give the teams access to resources it needs  to learn. Hey, a Pluralsight subscription, is a great way to facilitate a  learning organization. It&#8217;s not a huge expense, it&#8217;s a way that people can  actually learn and share. Conferences are really important. I know it&#8217;s easy to  do things online now, and never attend something in person. But, I think most  of us realize that there&#8217;s a lot of social aspect to a conference too. You&#8217;re  brainstorming ideas, you&#8217;re simply absorbing new information in a free setting,  where you&#8217;re not competing with other work responsibilities. So, encouraging  some of that. Likewise, encouraging public profiles and engagement where people  can continue to learn from the public. Don&#8217;t lock your people away in a fear  that if they learn a lot, they might leave. Instead, it&#8217;s about having a  learning organization where you&#8217;re encouraging people to experiment. Our team  had a hack house, or has one once a year where we go and live together and  learn new stuff and try to deliver features, but it&#8217;s really both a teamwork,  as well as a learning opportunity. Use these sort of places. How can I put my  team together to kick off proof of concepts of new technologies? Encouraging  that fail-fast, which is a big part of innovation.<\/p>\n<p><strong>Change Culture: Trust<\/strong><\/p>\n<p>Trust is a big aspect. And it&#8217;s going to be, how am I going  to be successful if I can&#8217;t trust the other pieces of the organization? And  realistically the other parts of the supply chain. Again, I&#8217;ve got this huge  pipeline that goes from business idea to technology solution that helps solve  it. And if all of those people aren&#8217;t in line, if there&#8217;s not some trust  between them and some relationships between them, I&#8217;m going to struggle with  that. And of course, also it leads to happier employees, more efficiency. When  there is trust and it&#8217;s not constantly this battle of hey, did they give me this  specification knowing it wouldn&#8217;t work right so my team might look bad? Or, did  they give me half-baked code that&#8217;s not going to run in production so they can  meet a deadline? When I trust that everyone&#8217;s doing things in the best  interest, on the same page, big value add there.<\/p>\n<p><strong>Change Culture: Reinforcing Values<\/strong><\/p>\n<p>And one of the big pieces as you wrap all this up, is about  actually sharing, living, rewarding the right values. What values do you care  about as a company? I can tell it really easily by seeing how you promote  people, how you fire people, how you hire people. That demonstrates really  easily to everyone what you actually value. You know, if the people getting  promoted are the ones that are there a while, okay, I mean you&#8217;re telling me  you value longevity, versus potentially individual excellence. Because it&#8217;s  hey, it&#8217;s whose been here the longest. If you reward the person who does a lot  of work, but a lot of it&#8217;s not high value, but you like the volume, again,  you&#8217;re easily letting the other team see that. If you badmouth another team, so  will your employees, as a manager. If you reward firefighters, people who come  in at the last second and rescue something, even though they might have caused  it in the first place. You know what? Teams won&#8217;t worry about consistency,  because you reward people who do heroics. If you reward people who do quality  work, that does get noticed. So, it&#8217;s not just a memo that goes out that says,  we now will value collaboration and teamwork. It&#8217;s proving it. It&#8217;s as a manger,  making sure that you&#8217;re interchangeable with your counterparts in some of the  other IT Teams, it&#8217;s making sure Dev and Ops really are on the same page. If  you&#8217;re not, it&#8217;s really obvious. So, it comes down to the whole team to  actually live these values, management to reward those same ones, and teams to  share them between.<\/p>\n<p><strong>Change Organization<\/strong><\/p>\n<p>So we just talked about changing the culture. Really next up  is changing the organization. How does the organization now make some of these  changes, so that you can realize the value of DevOps from some of those  cultural changes?<\/p>\n<p><strong>Change Organization: Gain Understanding<\/strong><\/p>\n<p>Three things I&#8217;m going to briefly walk through. First,  gaining understanding of what you&#8217;re working on. Altering the team structure  potentially, and streamlining some of your procedures. Some of all these coming  together to change the organization to set yourself up for DevOps success.  First is having clear vision, really gaining understanding. You can&#8217;t automate  or optimize what you don&#8217;t understand. So, it&#8217;s building empathy for users,  understanding what&#8217;s going on in the system. DevOps Leader, Jeff Cessna,  mentions that you can&#8217;t design anything truly useful unless you understand the  people for whom you&#8217;re designing. You can&#8217;t skip right to automation tasks,  where hey, we&#8217;re doing DevOps, we&#8217;re just going to write a bunch of scripts.  That doesn&#8217;t make sense. You really need to learn to &quot;see the  system.&quot; And this is focusing on different perspectives. What&#8217;s the value  that this system provides? What&#8217;s the waste that it has? What&#8217;s the process?  What&#8217;s the flow? So looking at things from a waste perspective, we talked about  that in the first module, all the various types of waste. You could look at  value. What&#8217;s the expected value of this particular system and flow? What&#8217;s the  specified value that&#8217;s been asked for? What&#8217;s the delightful piece that makes  someone happy? Doing process, things like process maps and value stream  mapping. Look at the process to see where, sometimes you have necessary waste that&#8217;s  part of the process, that&#8217;s fine. But where are there steps in the process  where you can actually add value to the customer? Where don&#8217;t you? And looking  at flow, do I push or pull work? At which steps do I do that? What&#8217;s the flow  among Dev, Test, and QA, Production, Support, Projects? How does everything  flow like that? You&#8217;re really looking for how does everything work together?  What&#8217;s the logical architecture? What&#8217;s the process architecture? How do you  explain that everything&#8217;s working right? You can&#8217;t do that, unless you look and  see the whole system. And then even repeating that process for the people in  groups involved in supporting that system, so really getting a clear vision of  what you&#8217;re working on.<\/p>\n<p><strong>Change Organization: Recognizing Bottlenecks<\/strong><\/p>\n<p>It&#8217;s okay to understand those bottlenecks. Identifying the  constraints, trying to get the most out of them first. Realizing that, maybe  your first step isn&#8217;t that you just throw a bunch of money at people at the  constraint, you try to actually, how do I get the most out of it? How do I have  other things that may give some resources to it? Or, how do I change my  process? Because, this is, maybe QA is just really complicated and there is  only so much you can do there at a certain speed. So how do you do things that  make their process easier? Worst case, you elevate the constraint and do  something else. These bottlenecks can be technical or social debt, they can be  people, they can be tools, they can be outside parties. All those things can be  constraints. Let&#8217;s talk through a few examples that you see in most  organizations. What are some of those things that lead to bottlenecks, because  of the way the organization has set up some IT functions? Things like  inconsistent environments are a really big bottleneck. So, if you&#8217;re  Globomatics you probably have Developers who don&#8217;t have production-like  environments to develop against. So you get the typical, hey it works on my  machine. Or you&#8217;re doing everything as a local administrator and then  surprisingly it doesn&#8217;t work in production. But why is that? Why can&#8217;t we do  those things? They may not be the same in size, you&#8217;re not going to have a  production quality data center on your desktop, but why isn&#8217;t the configuration  the same? We waste so much time getting code tested and deployed correctly when  each environment is different. So where&#8217;s the bottleneck here? Often it takes a  long time to get these environments. Can you easily recreate production and  development? This is a bottleneck often for Developers who are waiting to  either get that right environment or it becomes a bottleneck in deployment,  where now you have to do all of this testing and extra work because you didn&#8217;t  have everything done upstream. So, it could be a bottleneck for Devs, who  aren&#8217;t getting what they need. It could be a bottleneck for Ops, who can&#8217;t turn  the system live until they&#8217;ve properly got it working in this new, different  environment. QA becomes a bottleneck when they hit defects that Developers  can&#8217;t reproduce. Because QA may be working in a production-clone environment  that Devs are. And so now they become this bottleneck because they&#8217;re that  first stage of actually testing this in a legit environment. So some of the  solutions for this, looking at the technologies we&#8217;re going to talk about in  the next section to help you maintain a consistent environment at every step.  Development, working with Operations to use different cloned environments on  their Dev work stations and in each subsequent location. Everything should look  the same everywhere and that&#8217;s a lot of the responsibility of Ops in a DevOps  process. That&#8217;s what they own. Ops working to deliver on-demand environments. I  need a perf test environment for three weeks, that shouldn&#8217;t be a big deal.  That should be something we can create and configure very, very quickly.  Another place you end up seeing bottlenecks is when you have a lot of custom  manual builds in your organization. There are systems that companies, like  Globomatics, that people are scared to touch or update. But how fast can I  deploy code? Is there an inventory of useful features, sitting in QA or in  Source Control, that has to wait for scheduled deliveries because it&#8217;s so  cumbersome to do an update? Is that the bottleneck that&#8217;s caused by this, where  because you have these long-running custom-builds that are kind of unreliable  and inconsistent on each time, the impact of that is I build up this inventory.  I create a bottleneck. It doesn&#8217;t matter if I develop any faster or I do QA any  faster. Everything backs up behind the deployment process. So if I&#8217;m throwing  money at adding developers to my team and I keep slinging more interesting  code, but it keeps stopping, at that point where I do deployment because that&#8217;s  where my bottleneck is, I haven&#8217;t fixed anything. Now I&#8217;ve just put more behind  that bottleneck. So some of the solutions are some of those continuous  integration, continuous delivery tools we&#8217;ll talk about next. Collaboration  between teams that have responsibility for aspects of deployment pipeline. So  that Information Security, QA don&#8217;t accidently become bottlenecks because they  weren&#8217;t aware of what was coming. So, this constant collaboration where people  can pull the work they&#8217;re doing, you&#8217;re not just shoving things over walls,  surprising people. Instead, you can eliminate these bottlenecks by having some  automation, having some better communication. Poor quality definitely results  in a bottleneck and something you see in organizations. Without proper  accountability for shared excellence, Devs may hand off code that has known  bugs or is incomplete. This is often done to hit a deadline or because the  mentality, that hey, Testers will catch it, I don&#8217;t have to worry about doing  everything at the lowest level. I don&#8217;t have to do the best unit testing, I  don&#8217;t have to do my own integration testing locally, someone else will do it.  The impact is QA and Testers become the bottleneck again. So as deployments  fail and there are no automation scripts and things like that, they&#8217;ve got to  run through their own code inspection. They have to look at these things. So  when poor quality is there, you again, end up with this bottleneck where I  can&#8217;t continue to move code through the software delivery pipeline because it&#8217;s  going to get stopped at multiple places. Or, worst case, it hits production and  I&#8217;ve got this defect waste of I&#8217;ve got to go back and fix things. Inevitably  this causes problems. So the solution to this is quality from the start.  Rigorous integration testing, where Developers can&#8217;t commit code that fails to  meet certain standards. Baking in more and more quality upfront, where it&#8217;s not  relying on last-second inspection to actually check and see if this is good  stuff or not. The final type of typical bottleneck you see as we talk about  understanding the system and recognizing these things, is a lack of  communication. When teams don&#8217;t share their plans, they don&#8217;t share their  objectives, even on a project-by-project basis. You end up with this system  where things just overall push to each environment, where teams aren&#8217;t pulling  work as they have readiness for it. Instead, things are just pushed and shoved  to them. The impact of this is code may be ready to go and there&#8217;s no servers  ready yet. Devs might be waiting on work to do, because upstream processes  haven&#8217;t actually handed over enough requirements for them to work on. QA has  nothing to test, but then all of sudden gets a deluge of things to test and  they have three days to do it before a production go live date, because work is  batched. When Developers often see the outcome of their work, via the feedback,  the monitoring, the other parts of what DevOps means, they do better work. When  I see how this has to be managed in production, when I see some of these  things, communication, that feedback loop, is huge. I don&#8217;t want siloed tribal  knowledge. I want to make sure that teams are communicating their plans, what  they need to be successful, and that makes a big difference as each team that&#8217;s  upstream in that pipeline is going to communicate the goal, for them to communicate  better and be very transparent. When you&#8217;re doing that, when you&#8217;re changing  the organization, everyone understands then better what&#8217;s coming, what to  expect, and you have a much cleaner flow through the system.<\/p>\n<p><strong>Change Organization: Alter Team Structure<\/strong><\/p>\n<p>The second step as we talk about changing the organization  is potentially altering the team structure. And what does that mean? So, a  typical silo team, this is what you have in most IT organizations, that I&#8217;ve at  least seen. You have these share pool of Developers who work across projects  and after deployment go work on another. We talked about that, that&#8217;s a problem  our fictitious company has, is you have people who leave and you&#8217;ve lost all  your tribal knowledge. They leave and you&#8217;ve often lost some of your tribal  knowledge. You often have teams of specialists. People who have very  specialized skills and get brought into certain projects, not generalists. Even  startups have roles that get carved out into this above org. This has nothing  to do with large team sizes. If you have a 10-person technical team you  probably have carved things out to some extent like this. Now sometimes as  projects get deployed, you still have a skeleton team that looks somewhat like  this. Or, you end up with just a system owner who is responsible for a lot of  things. Ops is typically pulled as well. One admin responsible for dozens of  servers, dozens of apps. You can try in this sort of model to increase the  feedback loop. And that&#8217;s going to be important. If you can have a good  feedback loop, you have more tribal knowledge shared. You&#8217;re going to have more  trust. You&#8217;re going to have more collaboration. But this is a tricky model, but  this is how a lot of organizations are set up. Recently Adrian, at a conference  in the last few weeks, made this statement, &quot;DevOps is a re-org, not a new  team to hire.&quot; So, some believe that you go hire a DevOps Team and if you  have a DevOps Team, it doesn&#8217;t necessarily mean you&#8217;re doing it wrong. Some  people think it means you&#8217;re completely doing it wrong, because the whole point  wasn&#8217;t to create yet another silo, it was to actually infuse the idea of DevOps  across your teams and have these kind of collaborative, virtual teams that all  work together. Not just have a new team that tells people what to do. But  there&#8217;s no real wrong answer here. You may end up keeping all the same people,  even the same teams, but change the philosophy. That&#8217;s what a lot of people do,  promote in this. But you do occasionally see DevOps Team popping up, but really  if you think about it more as a reorg, not as I have to just hire a new team,  that can change your thinking. So some of the thinking in this space, is that  having more permanent teams around services, treating these things as services,  that on delivering, not projects. What&#8217;s a project? I mean, a project may be  towards a service, but I&#8217;ve got something that&#8217;s going to live for weeks,  months, years, decades. And that&#8217;s a service that I maintain. So it&#8217;s not a  deploy and disband sort of model, but a purposeful organization of teams around  internal products. You retain knowledge, you do quick acting. Guess what? I  need a lot less documentation, when my team is consistent. When I&#8217;m not writing  these 400-page specs so that the next poor sap who gets ownership of this  system knows what to do with it. When I have a team of Developers and QA, and  all those who retain some ownership of that system and service moving forward,  I don&#8217;t need so much documentation. I don&#8217;t need all this, sort of extra  material. Instead, I have that retained knowledge. I can act quickly. If  there&#8217;s a problem I know exactly what&#8217;s going to go wrong. I know exactly who  to bring in. Sometimes this works better with more generalists than  specialists. Specialists encourage silos. I can only participate in one unique  way, I only own one capability. Instead, is you have generalists. People who  can work across services if need be. People who can own a capability when they  develop it end-to-end. But thinking this sort of way is interesting. Now obviously,  this is not a fit for every service and app in an enterprise. You&#8217;ve got small,  departmental apps that can&#8217;t justify a team who stays around it. That requires  a lot more headcount, which it may in this model. But also could deliver more  value as you look at your bigger systems and services. And how do I rearrange,  maybe some more persistent teams around them. You may, to do this successfully,  most likely will have to incubate this, in parts of the organization. Not doing  this organizationally wide. Heck, my company is doing that right now, is we&#8217;re  trying to reorient our various product lines around specifically maintaining  dedicated teams instead of these pools of resources who bounce around the  various products. Actually organizing teams at the broader company around the  service lines, so that you do have consistency, shared knowledge, quicker  delivery. Actually putting Ops and Dev and all those teams together. So, we&#8217;re  trying to live this right now and there are some people doing some good  thinking in this space. It could be radical for you, but it also may be a way  to incubate some of the ideas of DevOps in your organization. Even if you can&#8217;t  make that sort of dramatic change, at least have Project Teams with all of the  functions with the same objectives. Not as many of these hey, we&#8217;ve got 30  people on this team, all dedicated 10%. It&#8217;s really tough to pull that off. So,  can you really have every group represented, but with actually more time  committed? Are they involved in planning? Is there transparency for each  other&#8217;s plan? Do they define success in the same way? As you&#8217;re bringing in  consultants and internal teams, you have this mishmash of matrix teams, often  with very, very different objectives, especially as you bring in outside  parties. Is that the best way to work here? No, not typically. Especially as  I&#8217;m doing DevOps, I need a clean communication channel, I need shared  objectives, and I need everyone working on the same page. So, I want the whole  team onboard with deployment processes. I need to identify gaps in automation,  and have the whole team work together to fill them. Have people who don&#8217;t just  airlift to the end of the project and derail it, because they don&#8217;t understand  the flow. Have a higher commitment, more people involved, more dedicated on  these big teams. And the last piece of this, if you almost take nothing else  away, consider the handoffs. You&#8217;re part of a pipeline. If you&#8217;re in  Development, you have a customer downstream who is most likely not your end  user. A customer of Dev is often Operations. Maybe upstream it&#8217;s the other  business department who has needs, but it&#8217;s rarely, sometimes not the end user.  Operations often interfaces with the end user. So, just always think about your  handoffs. Think about the post-deployment. What happens after this project goes  live? Ideally, it&#8217;s the same team that built it that works together. But even  if you don&#8217;t have that, make sure you&#8217;re always empowering the next person in  line, streamlining things, giving them what they need so that they can be  successful.<\/p>\n<p><strong>Change Organization: Streamline Procedures<\/strong><\/p>\n<p>This last part of changing your organization really relies  on streamlining procedures. And so how am I taking some of these procedures in  my organization, streamlining them a bit to actually enable DevOps to work? And  not have to have the same cumbersome processes that were sometimes put in place  before you could really do some of the automation, before you could really have  this sort of collaborative environment, actually build this up. So first step,  really is some of the self-assessment. When seeing the system, make sure IT is  part of that and the processes and procedures. Turn the mirror on yourself. So  as we talked about earlier, look at the flow between Dev tests and QA, and  Prod, Support. How projects interface. Look at how you do change management.  Look at how you do deployment management. Look at how you do any knowledge  management. How are you storing information and sharing information? How do you  do incident management? What do the policies and procedures you have around  some of those things, how are they either encouraging or discouraging the flow  of value through the system? If you&#8217;re recognizing when you&#8217;re doing value  mapping that you&#8217;ve got all these cumbersome processes and procedures, that  were in place to maybe protect yourself a long time ago, but now are really a  hindrance, really have the courage to inspect those. And see where they really  do and don&#8217;t add value. Which really comes down to eliminating waste. You know,  you may have policies and procedures that you need to eliminate. Now again, it  may take technology demonstrations, it may even show practical demonstrations  before it&#8217;s possible to go remove policies and procedures. I don&#8217;t expect that  you can come in and just say we&#8217;re not going to do this anymore. But looking  for those and saying we need to prove that we don&#8217;t need this same sort of  rigor around this. You may have procedures today around requesting hardware,  new or upgraded. Requesting a change, adding Developers and giving them access,  getting monitoring alerts. Do you have policies around production access,  remote access to resources? Things like that. Are they adding artificial  delays? Do you have excess approvals, to kind of cover yourself because you need  this audit trail, manual double-checks. As we talk through the automation tools  next, think about each one helps eliminate a waste you already have in the  policy and procedure realm. Sometimes those again, were put in place to make  you feel better. But in essence, they can be removed by automation, a better  technology audit trail, better quality that now they&#8217;re just getting in the  way. Now they&#8217;re just preventing you from pushing value faster. You&#8217;re waiting  for all these approvals to ship valuable code to a production mobile app. Can  we get rid of some of those? And that you&#8217;re only able to do it when you can  prove that you&#8217;re delivering the right value and the protection and the  compliance. And we&#8217;ll talk about that here in just a moment.<\/p>\n<p><strong>Addressing DevOps Objections<\/strong><\/p>\n<p>So we talked about changing the culture, changing the  organization. Now let&#8217;s talk about the objections. This is not all unicorns and  rainbows. There are things that you can listen to this and go, some of this  sounds great, some of this is completely unrealistic. So how do we address some  of those, both in a good way and bad way? Not every answer is going to be well,  just be quiet, DevOps is great. You do have to ask hard questions. The problem  with many IT Shops is that they all think they&#8217;re special. Hey, we have special  technologies and processes, our clients are different than anyone else&#8217;s. But  in reality, it&#8217;s not really the case. You know, a lot of IT can be  interchangeable. Instead of treating yourself as, I need all these special policies  and procedures because we&#8217;re unique. Instead you almost have to admit to  yourself, let&#8217;s assume everything I&#8217;m doing is wrong, and then how would I do  it better. And be open to change. So at least keep that in mind as you think of  your objections. Am I doing this because I think we&#8217;re unique, or because I&#8217;m  scared of change, or because there&#8217;s a legitimate reason this wouldn&#8217;t work for  us? The first one is security. So clearly when a lot of people hear about  DevOps at first, they think, I can&#8217;t have Devs touching production. There are  all sorts of information security problems, code security problems. But just  not, this is a nonstarter for me, I can&#8217;t have a bunch of Devs who now have  production access, I can&#8217;t have things flowing willy-nilly through the system.  But really in the response of this, there are a lot of dimensions to this.  Focus on quality, reduce the security vulnerabilities. When I&#8217;m focusing  upfront on good quality, I&#8217;m probably taking better care of what I&#8217;m building.  Focusing on teamwork and communication means Info Sec isn&#8217;t the last second  partner, instead a key team member upfront, that&#8217;s part of the collaborative  model, it&#8217;s part of the communicative model. Is making sure people are brought  in early. That you&#8217;re assessing this throughout the pipeline. Pushing code  quickly means any vulnerability can actually be patched fast. There will always  be defects. It&#8217;s almost impossible, I don&#8217;t know if we know of software that  doesn&#8217;t have defects. But when I have a streamline pipeline I can find the  problem, fix the problem, push the problem fix in minutes. And that&#8217;s a huge  difference and a huge security win. Automated, mirror test environments mean  that I can adequately do security testing well before production. Doing proper  penetration testing can happen in all these other environments, because they&#8217;re  actually clones of the same configuration, permission model setup as  production. So again, DevOps if I do it correctly, can give me so many more  ways to test prior to the last second. When I have instrumentation in my code,  it helps all Service Teams track down issues faster, including security ones.  So again, that sort of model is making me more secure. In reality, DevOps  shouldn&#8217;t open you up to security issues, it should actually close most of  them. So, while there are legit reasons for some of these things, recognize  that actually you end up more secure in many of these environments. Now the  related one to security is the compliance piece. I can&#8217;t be compliant if  everyone&#8217;s touching everything. You know, I have audits. I have to do certain  things. That&#8217;s why we have all these policies and procedures that you&#8217;re  checking off that you&#8217;re doing things. That four people have approved  something. But again, many of the same answers I just gave for security.  Compliance frameworks often look at information security, access, audit  history. But most of the time legacy processes were put in place because it was  impossible to track down changes across systems. When you have streamline  automation and few or more meaningful policies, you should have less chance of  being out of compliance. How many of us have taken these courses internally,  where you&#8217;re supposed to read a document or check off that you&#8217;ve read this  compliance or this policy, and it&#8217;s this massive, cumbersome thing or there&#8217;s  50 of them you have to read on a Friday. I&#8217;m less compliant when I face that,  because I&#8217;m simply not absorbing it all. There is a knowledge waste there where  I&#8217;m reading through it so I can check it off and say I&#8217;m done. Versus few or  more meaningful polices, I&#8217;m going to absorb that more. And so as I look at  compliance and automation actually can make compliance much, much easier. By  having true audit trails, by having true security controls in place, giving me  the right least privilege in my systems so I can still prove that certain  people can&#8217;t access certain things. Unless the application&#8217;s monolithic, I can  do this least privilege approach. I can have security zones where access to the  most sensitive information is forbidden. It doesn&#8217;t have to be all or nothing.  Where my Devs have production access to sensitive patient data in the  Healthcare Industry, or financial information if I&#8217;m dealing with PCI. I can  segment certain things so that I still use role-based access to who can do  what. Just because they can&#8217;t access a certain piece of data, shouldn&#8217;t mean  that they can&#8217;t push code to production using automation tools. So really  siloing and segmenting out who can do what, where, doesn&#8217;t have to be all or  nothing. I can still be completely compliant in a DevOps environment. The next  real concern is remote teams. So let&#8217;s say co-location is not possible. I&#8217;ve  got an offshore team, I have nonlocal teams. I&#8217;ve got some things outsourced to  different providers who are my operations, things like that. You know, response  to that is that definitely can be tricky. I do it with my own team, I&#8217;m remote,  where my Engineers and Operation staff are mostly centralized. It&#8217;s not ideal,  but a shared culture and vision does make it more possible. Technology makes it  more possible. Where I can actually be collaborating with this team in real  time that does make a huge difference. But if Globomatics, our demo company  here, or you have this organization where any major function is completely  handled by some sort of faceless third party, frankly it will difficult to  optimize your entire pipeline. If you know you just hand things over the wall  to this partner, who actually owns your infrastructure, and you have no say in  how that&#8217;s managed, that&#8217;s a challenge. You know, given the theory of  constraints, you may actually be optimizing areas that aren&#8217;t the bottleneck.  You may be doing a bunch of things in your org that aren&#8217;t moving the needle,  because that next part in the pipeline can&#8217;t deliver as quickly as you are. So  you may need to change either the nature of your partnership or regain control  of aspects of that pipeline. Even though they may own the infrastructure, maybe  you get the permissions possible to do application pushes on your own, without  just handing over code or things like that. But, remote teams can work in a  DevOps model, but everyone still has to follow those other cultural changes to  make it possible. Another objection you&#8217;ll hear is the Ops impact. What is this  impact in Operations? Is this a sort of no-ops model where I have to fire all  my Admins since now everything&#8217;s done by robots or done by developers? In  reality that&#8217;s not the case. I mean, historically of course, Ops roles, most IT  roles are constantly changing, those roles do. But Ops takes on the extremely  important role of delivering the environments everywhere. Giving production  quality environments for Dev, Test, Prod, and others. Configuring those,  monitoring, maintaining, tuning. Teams are still working jointly to deliver  this pipeline. Most organizations are not asking Developers to suddenly know  how to construct an optimal network topology in the cloud, or on premises, or  how to troubleshoot all server OS issues. DevOps isn&#8217;t about Developers now  simply doing everything. It&#8217;s about both teams understanding their part in the  pipeline, having those right feedback loops, and optimizing each other, as  well. So, Operations may not be loading punch cards or racking servers as much  anymore, but they&#8217;re still keeping that infrastructure running and at scale and  working on these systems and services and delivering things as part of this  pipeline. It doesn&#8217;t mean to make them any less critical. But it does  potentially have a change in their role, and may modify, to hopefully more  value-added activities. There&#8217;s definitely the legit question of legacy  systems. Hey, these new-fangled stuff can&#8217;t work with my crazy-cots product or  my legacy platform. I can&#8217;t do this at all in this new model, I&#8217;m stuck with  these old things. I guess it will only work for new systems. You know, large  companies can&#8217;t add new code or string new code to systems, often because they  haven&#8217;t built the necessary flow in front of the production release. Ignore the  technology, do you even have the proper flow leading up to those legacy systems  to release stuff to effectively, efficiently test and verify these code  changes? Probably not, right? I mean, that&#8217;s one place you can continue to  optimize even if you can&#8217;t have automation tools to update your legacy  platform. You can still do some continuous integration upstream. You can still  do some more-scripted deployments, even with older environments. And in a  DevOps culture you&#8217;re still trying to build Service Teams that have knowledge  and shared ownership of the service. So you can still do things like  introducing monitoring, having teams that are really maintaining this service  in a different way. Even though it might not be the most modern app that  supports one-click deployments to production, It&#8217;s not just about pushing code  to prod. One aspect of DevOps is about increasing that flow of work through the  system. And that&#8217;s by optimizing all the different places where value is added.  And that can happen with a legacy system or a completely modern system. So don&#8217;t  always just think about, I can&#8217;t take this system and update SAP live in prod.  Therefore, it&#8217;s not part of our DevOps cycle. Baloney, you can absolutely do  that. Make sure you&#8217;re optimizing all of the aspects of DevOps, not just  thinking about code pushing. A big, reasonable objection is, my team doesn&#8217;t  know any of this stuff. We&#8217;re not some hipster startup who loves using Chef,  and Puppet, and writes Node.js. We&#8217;ll leave that for them. We&#8217;ve got all our  nice, old legacy processes. My response is kind of, frankly, learn it. I mean,  this is exciting stuff. Some of these skills you do already have. Your Admins  are probably pretty good at scripting. And that&#8217;s some knowledge they can  either share with Development or simply have that as something they do well  like configuring and scripting some of these systems broaden that. So that  becomes part of what they&#8217;re doing for development environments and others.  Some of these skills are soft skills. This is better communication, teamwork,  continuous improvement. This isn&#8217;t hardcore technical skills for a lot of  these. We haven&#8217;t talked about any hardcore technical skills yet. We&#8217;ve talked  about things around how do I frame problems? How do I understand the whole  flow? How do I communicate across teams? How am I constantly learning and  thinking about improvement? Anybody can do those things. This doesn&#8217;t require a  12-week course. So it&#8217;s about collective learning and applying it immediately.  You know, we&#8217;ve all taken training, of course not this course, but we&#8217;ve taken  training and you haven&#8217;t had an excuse to use it right away, and forgotten it  three weeks later. No, instead, make sure your team is learning and applying  this interesting information. Build that skillset. It&#8217;s an important thing for  you and your team, that shouldn&#8217;t be a barrier to adopting DevOps.<\/p>\n<p><strong>Summary<\/strong><\/p>\n<p>Alright, I hope you enjoyed this module. We talked about  changing DevOps culture by focusing on why. Changing accountability, trusting  each other to work towards a shared objective. We talked then about changing  the organization, bringing the view of the system out in the open, clearly  identifying bottlenecks. We talked about changing the team dynamic, how do we  think, how do we maybe rearrange more around services then just this sort of  pump and dump strategy of hey I&#8217;m going to do this project, I&#8217;m getting out of  here, I&#8217;m working on the next one and moving on. Instead, how am I delivering  persistent value. Then we discussed some objections your going to hear when  adopting DevOps, you&#8217;re going to hear a lot of those when adopting any sort of  major change in an organization. But when you see the value, when you see how  companies are more valuable when they&#8217;re using a DevOps mindset your employees  are happier, your systems have less defects that you can fix faster, really  important. The next module is one of my favorites, this is where we go through  the technology that underpins a DevOps tool-set. What are the things you can  practically go look at today to learn more about how DevOps works and start optimizing  your company.<\/p>\n<p>&nbsp;<\/p>\n<h2>Introducing DevOps Automation<\/h2>\n<p><strong>Introduction<\/strong><\/p>\n<p>Hi, my name is Richard Seroter. Welcome to this third and  final module on a course on DevOps, The Big Picture. In this one we&#8217;re going to  bring some things all together and talk about some of the automation components  of DevOps. Specifically, we&#8217;re going to talk about some of the DevOps friendly  technologies that complement the cultural changes, organizational changes, that  we&#8217;ve talked about in previous modules. What are those things that really start  to bring that into focus? If we rewind from the previous modules, we talked  about the cultural and the organizational changes needed. We talked through a  lot of those. That you can&#8217;t do technology alone if you don&#8217;t have the teamwork  set up. If you don&#8217;t have a team structure set up, that even has some of the  shared knowledge and some of the system ownership and accountability and  empowerment that&#8217;s necessary. What we&#8217;re focused on here, on continuous  improvement. How am I using technology to continue to help with improvement? I  don&#8217;t like the, if it&#8217;s not broke, don&#8217;t fix it mentality. That doesn&#8217;t work in  DevOps. DevOps should be about automating repetitive tasks, the feedback loop  between Dev and Ops and other teams, always learning. Just because something&#8217;s not  broke, doesn&#8217;t mean it&#8217;s optimized, that there&#8217;s not tons of waste in it or  that it doesn&#8217;t actually work well in the whole flow of the system. So, we  should be constantly looking at improvement and how do we grow? How do we make  sure we&#8217;re doing things in our system? Hopefully often now, using technology to  make that possible. The stages of maturity, as you think about this progression  of technology, you go from using just source control, and sometimes that&#8217;s a  big step. You might just have source control sitting on a file share somewhere,  on your local machine. So even using a centralized source control is a good  first step. Then, having builds actually triggered by committing your source  control and doing integration testing right there. Then moving into some  automated deployment to testing. Have that next step of maturity of actually  taking these builds and putting them somewhere. Then actually automating some  functional testing and having that baked into your process. And then really  getting to this point where you can do continuous deployment to production. So  as we talk now about these tools, keep some of that in mind.<\/p>\n<p><strong>The Tools<\/strong><\/p>\n<p>So now we&#8217;re going to talk about the toolset. We&#8217;re going to  talk about, I&#8217;m really trying to put this into a reference framework where you  can think about each of the sets of tools. DevOps is not just, hey I&#8217;m using  tools to configure servers, which you may think of as just the first thing that  comes to mind when you think of DevOps. Instead, what are all those categories that  touch on all the things we&#8217;ve talked about so far in this course? You&#8217;ll see  the technologies that complement each one of those focuses.<\/p>\n<p><strong>DevOps Technology Categories<\/strong><\/p>\n<p>So as we look at that reference diagram, you&#8217;ve got  collaboration tools, planning tools, issue tracking tools, monitoring tools,  configuration management tools, source control, dev environment things.  Continuous integration tools, and then various set of deployment tools. So  we&#8217;re going to walk through each one of these categories and some of the  technologies you can use, today, to actually realize value in that area.<\/p>\n<p><strong>DevOps Technologies: Collaboration<\/strong><\/p>\n<p>Let&#8217;s first talk about collaboration. So, it&#8217;s not about  having more meetings. It&#8217;s about actually collaborating in a way that results  in action. How are you making sure that all of the teams are communicating  regularly and with meaningful information? Whether it&#8217;s in Agile, using things  like daily standups. Whether it&#8217;s having downtime exercises and actually  simulating failures. How are you encouraging collaboration? Rapid  communication, with the people needed to make a decision. That&#8217;s one of your  key criteria. Am I making decisions? Am I learning things? Am I properly  collaborating across teams? Tools cover a wide range of things here. It could  be real-time chat, discussion rooms, knowledge repositories. Things that help  me avoid the knowledge waste, but also things that encourage the collaboration.  And it&#8217;s using the right type of tool for each situation. Why does this matter  to DevOps? Because collaboration is critical, right? It eliminates the waiting  waste. It keeps you from doing things that impact others without their  knowledge. A really big part of DevOps success. So an example, of course you  have things like Skype. And I&#8217;m trying to make a decision or I&#8217;m trying to  simply walk through some information. Things like Skype and Lync, and so forth,  great tools for figuring out a way to quickly collaborate, typically  one-on-one, but even easier now to do kind of cross-team things. A great way to  make those sort of quick decisions or quick question and answer. I can use  tools like CampeFire or I can use something like Slack, which is a great way  for keeping a pulse of what&#8217;s going on, quickly bringing a team together to  make a decision. So let&#8217;s create a quick room, set this up, set up this  channel, get in and discuss a problem. There&#8217;s an outage, let&#8217;s have people  sitting in 10 different locations, quickly jump into a group, collaborate,  figure out what&#8217;s going on and move on. As a team leader, even a team member,  it&#8217;s a great way to use tools like this to keep a pulse on what&#8217;s going on.  What are teams thinking about? What are some issues that might not even have  bubbled up yet to management, but I can see people talking about something that  will become an issue? So a great way, again, to remove some of that friction  between the teams, be able to easily see what&#8217;s going on even though it hasn&#8217;t  made it to a status report yet, I&#8217;m keeping a pulse. Using blogging tools is a  way to actually store information. This is something, if you read the great  book, The Year Without Pants, by Scott Berkun, you can see how WordPress  themselves uses internal blogs to be able to share team progress and notes and  so forth. So I have a persistent record. Things like Slack and things like  Basecamp and Lync and Skype are great. Not always the same sort of persistent  information. Of course, I can go back and search things, but ideally when  you&#8217;re thinking about how do I store decisions? How do I make it easier for a new  person to onboard and learn something? Something like a blog is a great way to  give a new-hire a way to see something important. As are things like using  GitHub Wiki. How do I have persistent information for teams, that might want to  be, here&#8217;s our coding standards for APIs? Here&#8217;s how we do X, Y, and Z. Here&#8217;s  our exception handling strategy. How do I make that stuff easy to find? Make  sure I&#8217;m not just putting that in an email somewhere. It doesn&#8217;t really even  belong in these kind of ephemeral chatroom sort of things. I want persistent  ways, SharePoint wikis, blogs, things like that. I need persistent information.  Think about those. GitHub has a great solution and there are others you&#8217;re  going to find as well.<\/p>\n<p><strong>DevOps Technologies: Planning<\/strong><\/p>\n<p>As we look at planning tools, how do planning tools play  into DevOps and what are some things I have here? Really the key is, how do I  get the collective team participating in the planning? Transparency, are  everyone&#8217;s priorities in harmony? If not, why? So that&#8217;s a big part of DevOps  success, is again, that transparency, the communication, the teamwork. How am I  using tools, typically online tools, not static documents, to help me do that?  Static documents are out of date. The minute someone emails you a project plan  it&#8217;s probably already out of date. So you can have formal project management  tools, Kanban boards. You have a lot of ways you can share this information,  hopefully online in real time. You&#8217;re doing this to distribute ownership of  tasks, bite-size activities. Transparency between team members and simply  visibility of what are these guys working on? I can see what&#8217;s going on in a  crisis or in a bug triage process. Where is my thing in a priority list? What  did they end up capturing in their postmortem session about action items? I can  see all that sort of information in some of these shared planning tools. In my  own example, at my company, we use feature review meetings once a week. Where,  people from QA and Development and Design and Project Management, Product  Management, and Operations sit together and review what our external customers  are asking for. Shared vision, shared idea of what&#8217;s coming in and then we can  group, have feedback on the priority of it. Does this matter a lot, a little?  And so doing that is great. Instead of me in Product Management just saying  here&#8217;s a feature, this is what I think it is, and moving on, the transparency  is great. So that&#8217;s really why this matters to DevOps. That transparency  reduces knowledge waste and confusion about the blockers upstream and  downstream and what the priorities are. You&#8217;re seeing that in real time. Tools  like Trello have been great in this space. A great tool for actually creating  these sort of boards. We&#8217;ve done this as a company ourselves a lot, as we&#8217;ve  stood up boards for different functions. You invite different teams to it.  Real-time collaboration, who owns what? What&#8217;s the progress on it? All those  sort of things. It&#8217;s visibility, it&#8217;s transparency. It works across teams. It  works on mobile devices and so forth. A great way to actually do collaboration.  Visual Studio Online actually has some good features for planning as well,  where again, I&#8217;m using an online view to do things like manage my product  backlog, assign things to individual Sprints. Different ways to see things. A  really great way again to use a tool to do collective planning. Great  visibility. Where&#8217;s my progress? Let me jump in and change something. Great  tools. These are a lot of things, again, as you think about planning in a DevOps  world it&#8217;s about breaking down these barriers.<\/p>\n<p><strong>DevOps Technologies: Issue Tracking<\/strong><\/p>\n<p>Next we think about issue tracking, really the rapid  response. How am I doing things in a single way to collect, triage, and respond  to issues? Shared systems. Not transportation waste, of passing information  between multiple bug tracking systems. So if you&#8217;re in an organization where a  tier 1 support person collects information and then hands it off to another  team who enters it into their bug database, and then it maybe goes to a dev as  part of a feature. And all of this happens, by copying data multiple times.  Stop doing that. You end up with transportation waste, motion waste, knowledge  waste. The information continues to degrade as it travels between these  systems. So having a shared way to collect, view, and see what&#8217;s going on is  great. You&#8217;re closing the loop by having everyone looking at the same issue or  problems, not by passing it around. So this matters to DevOps because it&#8217;s  better responsiveness, not having knowledge waste, make sure you&#8217;re giving a  better end user value experience, by having ensure everyone can see what the  defects and problems are. Some tools in this space are things like Zendesk. A  great tool for collectively managing both knowledge and some sort of knowledge  repositories. You&#8217;ve also got where you can manage tickets and see threads, and  so forth. So a great, kind of industry standard, tool for that. You also have  products like JIRA, which is great not just for doing tracking in this case and  keeping issues and such front and center. It also has some tools for supporting  continuous deployment and continuous integration things. So, JIRA&#8217;s a great  tool as well. But, looking at these tools, where are my shared lists of issues?  How can people join and view these issues and interact with them?<\/p>\n<p><strong>DevOps Technologies: Monitoring<\/strong><\/p>\n<p>Next up is monitoring. How do we do the smart correlation?  DevOps success can potentially hinge on how you do system monitoring. If I do  it poorly, developers are going to be extremely upset because they&#8217;re going to  be the ones who get brought in or paged unnecessarily. Operation staff is going  to be annoyed because maybe there are things that they&#8217;re spinning up alarms,  thanks to developer code that actually don&#8217;t matter. So this is where Developer  empathy for Operation staff is really important. Developers should be building  the solution with their customer, Operations in mind. And Operations should  also be making sure that if they&#8217;re involving Developers in alerts and pages, that  they&#8217;re also thinking about what&#8217;s the smart way to do this. And so, when  you&#8217;re doing monitoring in a system, you&#8217;re probably doing it inside out and  outside in. How am I inside the system doing some monitoring? And how do I use  some things outside, that might be looking for up time or overall health checks  from a service perspective? Versus inside, maybe monitoring some of the  individual components. It&#8217;s key about seeing the health of the whole system.  Not just single servers in most systems nowadays. Especially as you think about  that whole pipeline and think about services, not just servers. So why does  this stuff matter to DevOps? It&#8217;s key to know what&#8217;s going on in the system.  Transparency is such a big part of this so that all the parties can see what&#8217;s  going on. A great monitoring solution means Operators aren&#8217;t getting randomly  paged, Developers aren&#8217;t stuck in a silly troubleshooting phase where they&#8217;re  trying to figure out what&#8217;s going on from some vague information. Cloud  environments can expand, contract, without raising any false alarms. So as you  have a well-thought-out monitoring strategy, that&#8217;s really going to help some  of these other parts of the DevOps pipeline with deployments and maintenance  and so forth. It&#8217;s up to Developers to do a great job upfront thinking about  this when they&#8217;re designing systems. Thinking about how Operations will  maintain and manage this moving forward. And again, for Operations to think of  when is the right place to bring in other people to help troubleshoot a problem?  Lots of technologies here. Things like Logstash are popular for managing events  and logs, collecting, parsing, storing, exploring various logs. This is free  and open source. You can access that. You&#8217;ve got things like Microsoft System  Center. So when I want to be able to do some group-based, collective  management, as well as monitoring of multiple systems in a Microsoft  environment. It&#8217;s a great tool for doing that, so if you&#8217;ve already got that in  place that can play part of your monitoring story. Check out things like  Kibana. So when you&#8217;re trying to make sense of information. You&#8217;re trying to  chart it, rank it, explore numbers. You know, you&#8217;ve got this raw data, and  I&#8217;ve got to turn it into information, turn it into knowledge. How am I using things  like Kibana to actually take raw data, raw logs and make that into something  useful? I&#8217;ve got to do that by actually reading it, charting it, giving me  different views on it. So, it works really well with Logstash, as well as  Elasticsearch. If you&#8217;re using that in your environment as well, Kibana is a  great tool. And there are other things in this space as well. Things like  Graphite, StatsD, other tools that will help you listen for stats or render  graphs, or do time series data. Really thinking about, what is the information  that your system is emitting? Your service is emitting? What is some  information that you might want from that so you can make smarter decisions?  From a pure monitoring perspective, things like New Relic, where I want to be  able to monitor, again, outside in and ping some of my services, see what&#8217;s  going on. Look at the response time, health checks, latency. All those are  really important things as I look at the holistic view of what my service is.  And as Developers take more ownership for the application in every environment,  whether it&#8217;s Dev, Test or Prod, Operations takes more responsibility for the  infrastructure in all those places. Developers need to care about this. They  may be the one getting alerted because latency is high and they need to figure  out if it&#8217;s an application problem.<\/p>\n<p><strong>DevOps Technologies: Configuration Management<\/strong><\/p>\n<p>Configuration management is what people typically think of  when you think of DevOps. This is really, oh how do you enforce a state to  avoid configuration drift by using automation to achieve some consistency? So,  forcing a particular state of a server, because we all experience that problem.  As you have a server online longer and longer, the configuration can  potentially change between servers as you go to quickly fix one thing and you  forget to keep it consistent elsewhere. And so it&#8217;s using automation to enforce  consistency. This is also where the compliance story can come into play. As you  make sure that you&#8217;re maintaining consistency, and can prove it, by having a  Configuration management tool. So how do I manage large sets of servers at  scale with repeatable and automated configuration enforcement? Configuration  management tools. You&#8217;re treating infrastructure as code that can be source  controlled and deployed. A huge benefit in DevOps where I&#8217;m really treating  environments, like a configuration file. Or I can easily spin them up reliably.  Any changes are applied systematically versus manually. I&#8217;m not going in and  updating individual servers with a new policy. I&#8217;m updating a policy centrally  and either pushing or pulling that information out to each affected server. So  why does that matter to DevOps? Pretty clear, this enforces consistency. So I&#8217;m  not wasting time correcting manual defects, I&#8217;m getting better compliance with  systematic state enforcement, versus a lot of manual work. So, one confusion with  DevOps is that Developers are just jumping into individual production machines  and tweaking things. If things are set up right from a technology perspective,  no one&#8217;s ever touching anything themselves. They&#8217;re using configuration tools,  they&#8217;re using deployment pipelines to push things out with a very clear audit  trail. And so that&#8217;s really the big part of this, is it&#8217;s not people with  access, it&#8217;s often systems with access that you&#8217;ve kind of broken down the  barriers and silos and allowed controlled access to a bunch of things. So a lot  of tools in this space, a very mature space. There are tools like Chef. You can  create these cookbooks and recipes with Ruby, manage tens of thousands of  Windows or Linux machines from a central server. Or you can do a Chef solo,  without a centralized server, and have servers that kind of maintain their own  configuration that they can just have stored locally and you can push locally.  It does have Azure integration now. So you can even do cloud integration with a  lot of these tools. There are things like Salt where you can set up this sort  of agent list model, that uses SSH instead. So not this sort of idea of the  same central server per se, but that has agents on individual boxes. You can  still have a centralized server, a master server, or you can just run these  minions all over the place on Windows and Linux machines as well. So I could do  Master or Master Lists. The key with Salt is to kind of focus on the more  high-speed communication between the nodes versus the polling sort of strategy,  that things like Chef or Puppet use. Speaking of Puppet, so it&#8217;s a great tool  for creating declarative infrastructure definitions. And I can manage this life  cycle from provisioning to runtime and deployment and reporting. This is open source,  again, like most of these. There are commercial offerings where I can have more  baked-in and support experience, but I can do thousands of machine management.  It&#8217;s something that works with Windows and Linux. And it comes with a lot of  prebuilt modules that you can see, that plug in and let you support things like  IIS on Windows or Apache on Linux. And it already has a lot of these modules  for managing and maintaining commercial software and open source software.  Ansible is a great tool. This also uses SSH instead of agents on boxes, meant  for automating configuration management, provisioning, and more. It&#8217;s got this  concept of playbooks for configuring and deploying and orchestrating  deployments. Not a lot of Windows support yet. There is some there. You can&#8217;t  run the Master piece on Windows, but again, a great popular tool. There are a  lot of things that are coming up in this space. Chef, and Puppet, and CFEngine,  and others have been around for a while. But you&#8217;re also seeing Ansible and  Salt, and some other things coming through as well. So think about what you  need. Really play with some of these. This is where the learning organization  will come in handy. A newer entry into this space is also PowerShell, Desired  State Configuration. So you can actually set things up as well now with  PowerShell and enforce configuration across Windows and now pretty recently,  Linux machines. So this lets you deploy and manage configuration information  for these machines. Enable and disable roles and features. Manage files, start  and stop services. Manage the registry. Deploy software. All those sorts of  things, you can have a central configuration with a pull server or again push  this thing out to individual machines. This is a great space. If you&#8217;re not  looking at configuration management, you&#8217;re missing out on a lot of interesting  tools. This will be something that&#8217;s great for internal Brown Bags as you learn  more.<\/p>\n<p><strong>DevOps Technologies: Source Control<\/strong><\/p>\n<p>So a big piece of that is once you have configuration  management though, thinking about source control. This is where you&#8217;re having  controlled access. You&#8217;re closely guarding your software assets. It may be the  most important part of DevOps frankly. It&#8217;s about realizing the power of the  source control systems and storing configuration along with code. So instead of  just thinking of source control for code, it&#8217;s about actually using this for  all of your configurations of all of your environments. So this may be the key  piece as I&#8217;m doing infrastructure config. I can have confidence that what I&#8217;ve  tested is what got deployed. And I can track the history of changes. Why did  this build fail after it got in production? Let me go ahead and compare the  configurations in source control. Why is this working differently? I can have a  source control tree, where I can easily see what changed between one and the  other, versus people manually changing boxes. If you have a process that says,  I have configurations that my configuration management solution uses, those are  always stored in source control. I can really, really easily have an audit  trail of what happened, who did it, when did it occur, and what&#8217;s changed. A  great, great way to have more security and compliance in your environment. So  there are lots of tools in this space. One of course to point out is something  like GitHub. Where you can have public repos of course, like Netflix, in this  example. Clearly your private ones, where I can store this information that I  can pull in for configuration management tools, continuous deployment tools.  Source control really ties a lot of this together, especially more modern  distributed ones where again, I can have things that are offline and things can  still work, much better than these sort of centralized engines where everything  can grind to a halt if something goes wrong.<\/p>\n<p><strong>DevOps Technologies: Dev Environments<\/strong><\/p>\n<p>There is a lot of great work in the Dev environment space.  This is about accelerating social development, enforcing consistency. How do I  get Developers up quickly, using standardized images, and no more of the, it  works on my machine answer? Of course this would matter to DevOps because it  means all parties can quickly and reliably share key environments. How are Devs  working in production-quality environments? Some of this is configuration  management, right. We just talked about some of those tools. Imagine baking  that into some of these images, that when a Developer stands up a box it  immediately enforces a particular state of security roles and firewall port  hardening. All the sort of config that looks exactly the same as production,  configuration management tools can definitely help with some of that. In  addition, there are new tools like web-based IDEs. Things like Codenvy, which  lets you actually do completely browser-based development of a whole host of  languages. Where I can build, and test, and deploy my code all from a browser.  This sort of stuff is valuable as I&#8217;m doing social development, I&#8217;m doing  collaborative development, between teams. I&#8217;m pair programing, maybe not even  in the same room, because I can see real-time each other&#8217;s code changes. So  that&#8217;s a pretty important thing as I&#8217;m looking at, again, how do I onboard  quickly? Reduce friction? Streamline the pipeline? Browser-based IDEs can be  pretty interesting in this space. One of the most exciting things in this space  is Vagrant. You can go to vagrantup.com. Again, most everything I&#8217;ve shown you  so far is free and freely available. But this is about portable work  environments, based on standard technologies controlled by a single workflow.  Regardless of what your hypervisor technology is. So, if I&#8217;m a Developer, I can  have a consistent environment that can be source controlled regardless of my  host OS. I can run this on MAC, Windows, Linux, whatever. And I can stand up  with a single command, Vagrant up, a particular box, defined by a Vagrant file,  which really defines what my box looks like. Here&#8217;s the base image, here&#8217;s the  Chef script to run when it stands up so it gets configured. Which underlying  hypervisor maybe it runs on, which I&#8217;m not exposed to as a Dev, I don&#8217;t have to  care about it. I can configure networks, set up multi-machine configurations,  very, very powerful stuff. If I&#8217;m in Ops, I can do quick dev and test locally  and use the same workflow to test on the cloud. For a Product Manager or a  Designer, I don&#8217;t have to worry about standing up every environment myself. I  can just Vagrant up from a Vagrant file that&#8217;s in source control and  immediately have a running environment of multiple servers that might be  running my app, without wasting a day setting things up or configuring it. A  really, really, really powerful way to run things on Hyper-V, VirtualBox, even  in various cloud platforms to easily extend that. You can create your own boxes  that have base OSs like obviously Ubuntu and Windows and other Linux flavors.  You can have ones that have software already on them, to experiment with them.  And now you can even use the Vagrant cloud to do things like sharing. Where I  could open up my HTTP port to any one person in the world so they can actually  access my box or let them SSH in, things like that. Pretty, pretty powerful  stuff. Likewise with multi-server. So if I want to set up a database web  environment, multi-tier environments, try out DR, I can easily Vagrant up the  whole environment by pointing to one Vagrant file, that again, is sitting in  source control and defines my server. I&#8217;m really treating infrastructure as  code, as a config file. Powerful stuff, definitely try this out.<\/p>\n<p><strong>DevOps Technologies: Continuous Integration<\/strong><\/p>\n<p>Continuous integration is about incremental progress. How am  I merging Developer copies with a mainline many times a day? I&#8217;m preventing  last-minute integration problems. Anybody who has worked on big enterprise  projects, knows that sometimes the most painful part of the project is that  last phase integration testing, where we take all of these independently  developed components, try to see if they actually work together, and then  inevitably spend a lot of cycles fixing it all. So it&#8217;s a big problem with  these non-Agile projects, where you&#8217;re not constantly integrating and that&#8217;s a  brutal phase. Instead, in continuous integration, having these centralized  build engines, coupling with automated test suites and even automated security  penetration and other code inspection suites, that verify code quality before  committing the build. So you really, I mean, the reason you&#8217;re doing continuous  integration you&#8217;re constantly building, releasing, and testing it to catch  problems before it gets released to production. Or you end up with a bottleneck  in QA where everyone&#8217;s merging all of this stuff, and now it&#8217;s stopping up  because it&#8217;s trying to collect everything together. You&#8217;re removing that  bottleneck. You&#8217;re really simply trying to make deployment boring, as much as  possible, because releasing changes, pushing changes, is done in an automated,  consistent, reliable fashion. Why is this good? Again, I&#8217;m getting the early  warning of bad changes. Constant availability of working code. Immediate feedback  to Developers if something didn&#8217;t work. This should be obvious why this is good  to DevOps, is code quality assurances, reduced defect waste. Increase  automation and reduce the friction so I can constantly be getting code ready  for production. A lot of things I can use in this space for .NET and Java  shops, something like TeamCity is a great tool. You can get this from  JetBrains. It&#8217;s good for .NET solutions, works with Visual Studio, has some  code analysis baked in, supports NuGet. It lets you do testing before  committing any changes. It shows you progress reports and a lot of different  ways to be notified if something goes wrong. Things like Hudson, now Jenkins,  been around for a while, really good tools for monitoring software builds,  quickly integrating some changes. Even distributing builds across servers for  complicated builds. Something to look at again, open source thing that you can  pull down. Products like Travis CI, also very popular. A lot of integration  capabilities. Spinning up databases, caches, and so forth as part of these  builds. It integrates well with GitHub. You can actually do it on the  .com-hosted builds and supports for a lot of different programing languages. So  another good tool to inspect there.<\/p>\n<p><strong>DevOps Technologies: Deployment<\/strong><\/p>\n<p>So the final category is we think about deployment tools and  this covers a lot of different things. But the goal, as I mentioned in  continuous integration, deployment should be commonplace, it should be boring.  Now continuous delivery, you&#8217;ll hear that term, means that software can be  released to production at any time. Continuous deployment means that every  change actually goes right to production. So, subtle difference there.  Continuous delivery, I could be deploying constantly, continuous deployment I  am. And the key is it runs through that whole deployment pipeline with some of  these tools. Where it&#8217;s actually running and deploying it out, getting  everything configured. The goal is to make deployments more reliable and less  scary. It encourages a thoughtful collaboration between Devs and Ops. When I&#8217;m  pushing things from a check in, all the way into production, everyone needs to  focus on whether those things that should be happening along the way, because a  person may never intercept any of it. From the minute I check in code, it could  realistically be in production seconds or minutes later. You really do think  about that whole pipeline. It&#8217;s important to work, obviously, between Dev and  Ops, that&#8217;s really realizing a lot of this vision. So I&#8217;m going to be talking  through here a bunch of tools that make deployment easier, not just continuous  deployment tools, but this matters to DevOps because this is what enables that  Agile delivery in a way that involves the whole org. I can have a bug fix,  that&#8217;s been asked for by somebody in HR. I can have a defect that somebody else  noticed internally. There could be a compliance or security problem, and I&#8217;m  able to make those changes, get them pushed all the way to production, with a  full audit trail, catching any errors that I might have made along the way. All  in a reliable way that I can easily trace back. Super powerful stuff. This is  really what brings DevOps to life. Implementing that consistent deployment  pipeline, where I&#8217;m seeing that all come together, by then taking the result of  all that stuff that exists in this reference before that, and then actually  getting that to a place where it&#8217;s realizing value to the end user. Whether  that&#8217;s an external customer, who pays for a service, or an internal user who  now can do something more efficiently, this is where it really pulls it all  together. So this space is full of lots of different types of concepts. There  are things like CloudFormation, if you use Amazon&#8217;s web services, and the idea  of orchestrating out deployments of environments. So it doesn&#8217;t handle code  deployments, that&#8217;s more of their Elastic Beanstalk service, but it&#8217;s  environment deployments. How do I automate and build out complete environments  via templates? How do I make deployment of environments a boring thing, where I  can click a button and create a multi-tier application? There are other tools  in this space. This is just one example of, how do I use a cloud environment to  quickly build out environments? There are cool tools like Packer. You can access  this, it&#8217;s free and open source. Create machine images for platforms. So, build  gold images, using provisioners that configure the running machine before  turning them into templates. So I can take a running machine, put a provisioner  on there that configures it, use a command line tool, maybe at the end of my  continuous integration process that actually takes that configured machine with  the latest code on it and creates a Vagrant image, a VMware template, an AWS  machine image. Whatever it is and more, gives me all of those different  templates for every environment and I can run it as a command line build. So I  can end up with these gold images that always have the latest code. This gets  me more towards that immutable server concept. Where I might never patch a  server, I may never update a server, I just replace them. So, because it&#8217;s so  easy to simply build gold images, as part of my actual delivery pipeline, I  don&#8217;t have to deal with configuration management to some extent. I don&#8217;t have  to deal with constantly patching machines, I just replace them. And using tools  like Packer are ways to make image template creation much, much simpler than  it&#8217;s been in the past. If you are paying any attention in a technology space  the last even six months, let alone the last couple of months, you&#8217;ve heard  about Docker, a Linux technology for creating isolated containers that are  really portable between machines. This is really OS virtualization versus just  kind of server virtualization. I&#8217;m carving up the OS into all these individual  containers with isolated resources, CPU and memory, network, virtual  interfaces, content isolation. I&#8217;m doing that all with an individual machine,  getting even more density of use out of a VM. This can run on any hardware, VM  bare metal. And so you&#8217;ll see this often baked into a lot of continuous  deployment pipelines and continuous integration pipelines where I can actually  integrate my code, push it out to a bunch of different containers, test it out.  I can do perf testing. I can do a lot of different things, even in production  now, using things like Docker. So it&#8217;s a great way to containerize things and  I&#8217;m seeing teams do this more and more as part of their deployment pipelines,  using containers for all sorts of reasons to test and scale things out. As we  look at an actually deploying code, things like Octopus works great for ASP.NET  and if you&#8217;re a Microsoft shop, taking those build artifacts from your  continuous integration run and deploying it to all sorts of different  environments. It integrates with TeamCity if you&#8217;re using that. You can deploy  to Azure, you can to deploy to On-premises. You can see what you last deployed,  the version of each component, the state of the last deployment. Great  visibility into what is running in production. What was the last run when I  pushed stuff, and how does it all look? I can manage application configurations  that might be environmentally sensitive. This one has this connection string,  this one doesn&#8217;t. IIS settings, things like that. Again, the Microsoft  environment. It can also introduce approvals and manual intervention, because  sometimes everything can&#8217;t be automated. Maybe there is a last gate in certain  scenarios where someone approves something before it goes to prod. And I can  also encourage self-service deployments even with role-based access. Tools like  this really speed up deployment delivery by giving me that audit trail and  automation. And finally, if something like Go, which recently got open sourced  by the folks at ThoughtWorks. So this is for continuous delivery as well. One  click deploys. Configured with XML configurations, I can see what&#8217;s building,  ensure that tests have run against the code before I push it. And I can even  see what&#8217;s in production. So, some great tools for actually doing continuous  delivery. Again, many of them open source and freely available.<\/p>\n<p><strong>Summary<\/strong><\/p>\n<p>This was a fun course for me. This is something my company  does, in terms of a DevOps focus. We&#8217;re constantly changing and improving, but  it&#8217;s good to see this in action. Hopefully this is something that&#8217;s interesting  to you. This particular module, we did a walkthrough of some of the key  technology categories and this is far from a complete list of all the different  tech that makes up a DevOps pipeline. Each of those categories have another  dozen things you can do to do collaboration, or do to issue tracking, or to do  source control management. But really, as you think about DevOps, how are you  making some of those incremental changes? How can you start automating things you  do manually, more than once? Focus on sharing knowledge and collaboration,  breaking down some of those silos, working across teams, towards a single  objective. Realize who your customer is. Think about the next stage in the  pipeline. Ensure that you don&#8217;t become the bottleneck. I would love your  feedback on the course. You can tweet me @rseroter, leave a comment here. Chase  me down on my blog, seroter.wordpress.com. I hope this at least made you think  that there was some interesting concepts in here for you and that you challenge  anything that you didn&#8217;t agree with. I hope we continue to move this  conversation forward.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Introduction and Goals Hi, my name is Richard Seroter and welcome to this course on DevOps. We&#8217;re going to be covering the Big Picture of DevOps, hence the title, really&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-6080","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6080","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=6080"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6080\/revisions"}],"predecessor-version":[{"id":6083,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6080\/revisions\/6083"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=6080"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=6080"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=6080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}