Tag: agile

  • No DevOps Roadmap? No Problem.

    No DevOps Roadmap? No Problem.

    I’m a huge fan of The Phoenix Project and I’m honored to count Gene Kim both as one of my professional inspirations and also as a personal friend. There is, however, a dangerous precipice inside of the Phoenix Project that, if misunderstood, could cause many DevOps practitioners and enterprise IT shops a daunting problem in adopting and progressing in the ways of DevOps.

    Roadmap or Roadblock?

    One of the main concepts discussed in both Kim’s The Phoenix Project and Goldratt’s The Goal is “the bottleneck” and what what to do about it. The basic premise explained is that all actions to increase throughput before a bottleneck, pile work up at the bottleneck and all actions to increase throughput after a bottleneck create a void of work to address after the bottleneck. The logical conclusion from this idea is that: in order to have a net positive effect on throughput, action must be taken at the, holistically viewed, tightest constraint on throughput within the operational system.

    This concept model is both accurate and valuable as the IT shop and the manufacturing floor have a lot in common. The power of this concept model, also happens to be where the aforementioned dangerous precipice is revealed – getting alignment on which bottlenecks to focus on can turn into a multi-month effort in many enterprises which can require consultants, workshops, deep-dives, process studies and other activities that are at once highly valuable and not always likely to be approved by a shop that has not fully bought in to the three ways of DevOps.

    One of the lesser understood secrets of corporate america is that even when you have formal authority, permission is required to do almost anything of substance. One “no” from the wrong party can kill even the most promising initiatives. This “veto effect” doesn’t require an absolute “no” either. Much like a parent saying “let me think about it”, the veto effect only requires the absence of a “yes”. This absence can take the form of “maybe”, “let me think about it”, “let’s wait and see”, or even a “run this by the other department heads and see what they think”.

    Given that any reasonably sophisticated roadmap takes more than a few weeks to develop, vett and roadshow around a medium to large enterprise, a mature DevOps roadmap suffers from a classic chicken/egg paradox for many organizations. I extend my deepest sympathies to those who have found that a clear and easily understood roadmap can somehow both provide and require the catalyst to consensus and permission to proceed in the ways of DevOps. You can take heart, however, in the fact that neither you, nor DevOps, are alone in this conundrum as this is what can be referred to as “the corporate condition” that we must all bear.

    While company may not always provide solace to the miserable, there is however, another way.

    Just Follow the Sun

    What is this one side road still available to you that has the power to relieve almost any non-alignment traffic jam? Start heading west! Just like the American pioneers, you can start following the sun to the wide open spaces of DevOps land where automation is plentiful and provable performance gains via instrumentation are gold. All you need is one or two comrades with some skills worthy of the road ahead and you can be off!

    Just because you can’t get the unix team to automate environment creation, doesn’t mean you can’t head west and automate your build processes. Just because you can’t automate your entire production deployment doesn’t mean you can’t head west and automate your performance testing and benchmarking processes. Just because you can’t get everyone to agree on the tightest constraint, doesn’t mean you can’t head west and alleviate the ones you already know about. To head west on any of these things, you don’t need full concensus, you only need a traveling partner or two.

    The Trail Has Already Been Marked

    For mid to large size enterprises, a true DevOps transformation happens over the course of three or more years. Allowing a lack of consensus to become a total standstill is not the right answer. The tool at your disposal to overcome the veto affect is public consciousness.

    Take UX design principles for example. It was less than a decade ago that design activities were considered a luxury item that produced pretty pictures; and then Apple happened and tipped public consciousness over. How many people are willing to casually veto design now?

    When public consciousness to the value of DevOps tips over, it will no longer be you going to the powers that be to get the “OK to proceed”. It will be them coming to you and asking “what is taking so long?”. In that one moment, you’ll be able to fire back at them: “Here’s my roadmapping proposal. I’d love to have you be my business owner!”

  • DevOps Can Be Your Fountain of Youth

    DevOps Can Be Your Fountain of Youth

    There is a different, almost magical dynamic, at a startup that seems to fade away over time as companies establish themselves. One of the benefits of DevOps, though, is that it creates an environment where that startup magic can continue to thrive. DevOps is like a fountain of youth that lets corporations continue to act like startups where it counts.

    Once upon a time Microsoft consisted of nothing more than Bill Gates and Paul Allen hacking away at a keyboard. Like any successful company, it grew….and grew, and grew, and grew. And, as it grew the culture changed, and departments were created, and bureaucratic policies were implemented. A task or feature that Bill or Paul would have just cranked out on the fly in an afternoon during the early days now must be vetted and approved, and go through a chain of command, and maybe a focus group before it can finally see the light of day.

    Startups are often formed by a few friends over pizza and beer while watching TV. In the beginning, things just get done. There is generally no real hierarchy of control, and everyone just owns what they’re working on and they get it done.

    Startups also remind me of watching Star Trek: The Next Generation. It always seemed like everyone new everyone else’s job—and anybody could fill in for anybody else. If Geordi La Forge—the chief engineer of the USS Enterprise—was captured or incapacitated, Worf—the Klingon chief of security could just step in and manage the warp core in his absence. Although everyone had a designated role, they all understood enough about the other roles to take over in a pinch. That’s how startups are before things grow so big that each person barely has enough time to keep up with their own department and duties, and barely knows what anyone else is doing.

    That brings me back to DevOps. The essence of DevOps requires that individuals take both initiative and responsibility for what they’re working on. The culture of DevOps is more fast-paced, and it doesn’t allow for protracted bureaucracy to drag things down. An organization that embraces the DevOps culture is forced to retain the innovation and agility that defined the startup stage.

    Granted, a large company like Netflix, or IBM still has a management hierarchy. There are policies in place, and different departments for IT, and human resources, and accounting. The IT guy can’t simply cut his own checks, and the accounting person can’t just go rogue and hire people without the knowledge and consent of HR. There are defined roles, and most of them serve a distinct and valuable purpose.

    That corporate structure still exists, but with DevOps you maintain that startup mentality where it counts—where new ideas are being developed and implemented. Of course, it’s also not without its challenges. Balancing the autonomy of DevOps with the policies and bureaucracy of a larger, established corporation can be confusing, and it’s important to have boundaries in place for just how long the DevOps leash is, and where the threshold is at which things need to be escalated up the chain.

    DevOps isn’t about a bunch of rogue employees running around autonomously wreaking havoc on the company, though. Much of DevOps seems to focus on tools and technology—and those are a crucial element of automating routine tasks and facilitating DevOps—but, the power of DevOps from a cultural point of view lies in collaboration. Done right, DevOps fosters an environment that frees employees to work together to find the most effective and efficient solutions.

    You probably won’t be able to recreate a situation like Star Trek: The Next Generation in a larger company. There will be departments, and there will be designated roles that need to be filled. With the right DevOps tools and technology, though, you can automate and speed up routine tasks, and free up time previously spent on those tedious jobs for employees to devote to solving bigger problems. With the right DevOps culture, you will unchain those employees and enable them to think and interact more creatively to come up with innovative ideas that may never have seen the light of day in a traditional corporate bureaucracy.

    DevOps can enable your company to function with the drive and agility of a startup, while still maintaining the wisdom and maturity of an established corporation.

  • Don’t Let the (April Fools Day) Joke Be on You

    Don’t Let the (April Fools Day) Joke Be on You

    As much as seasonal increases in demand for on-line resources are discussed, the one day that’s often overlooked is April Fools Day.

    It’s the day the Internet loses its mind and your best bet is take everything not just with a grain of salt, but with the entire shaker.

    The use of April Fools’ Day to promote brand awareness and bring some laughter into the world as everyone tries to outdo everyone else in a bid to be named the King of Fools is well known. This is no more a surprise today than is Black Friday, Cyber Monday or Super Bowl Sunday.

    So it behooves those participating in the tom foolery to be prepared. That means being ready to handle an increased demand for whatever it is you’re offering up for consumption. This is where devops shines; where automation and orchestration and a demand-driven scalability strategy is your best answer. Because you can’t be sure your offering is going to go viral, but you can be sure it won’t if any piece of the application delivery chain breaks under the pressure.

    In other words, this is unacceptable:

    err-db-conn

    What might have gone viral may end up languishing as just another overlooked and forgotten attempt because of a lack of database resources and a failed scaling strategy.

    One of the key aspects of devops is that it should approach scalability with a comprehensive view of how each piece of the delivery chain needs to scale – and when. Thresholds and metrics collected from each domain of an application architecture must be correlated and understood in the context of how it impacts capacity so that it can be automatically scaled – or at least addressed – on demand.

    Maybe that means devops must advise a cloud-based approach to handling demand for such days. Maybe that means a bit more preparation and integration across the entire application delivery chain to ensure the load balancing service is basing its decisions on the right variables such that resources are maximized and enable greater scale across the application. Maybe that means throwing up a cache to reduce the pressure on web and application servers, or taking advantage of a CDN.

    Regardless of the approach to how you’re going to scale, devops practitioners should be driving the process to ensure that on April Fools Day – or any well-known high demand generation day – the joke is not on them.

  • My Journey to the Land of DevOps

    My Journey to the Land of DevOps

    Welcome to my first installment in a series where I talk about my long transition as an engineer, first from a very traditional waterfall development methodology into a more Agile process, and finally into a true DevOps organization at my current gig at JumpCloud.

    Who Am I?

    First, a little background on me. I’m (almost) a lifelong coder, and by that I mean I started writing my first simple programs at 9 years old, on a HP 3000 MP/E host running MP/E BASIC. I got my first computer at home at 12, a Radio Shack TRS-80 with a whopping 16K of RAM, and a cassette drive for loading and saving programs. I’ve had computers in my house since then, and probably never in my life since have I gone more than a week without being in front of a computer.

    I love building software, but for a long time, I was resistant to changing how I did that in a professional environment. But, I try to be a guy who’s open to at least evaluating new stuff, even if I don’t dive into new things as a way of life. I tend to be one of those guys who does it (everything) the same way over and over until I see a way that is demonstrably better. I’m a creature of habit, but I’m also a creature of continuous improvement (as long as I can see the improvement).

    In college, I did a fair amount of system administration work on UNIX systems, including BSD and some System V R4 boxes. During that stint, I learned quite a bit about how not to destroy systems by running rm -rf /etc (every system admin does that on a production box at least once, don’t they? If you haven’t, I can’t really recommend the rush that comes from recognizing that you’ve just decided how you’re going to spend your night, instead of sleeping), and how to install, backup, maintain, and fix big (but by today’s standards laughably slow) mini-computers. I’ve always maintained UNIX/Linux system administration as a skill set, and it’s always come in handy.

    After that, I jumped into software development, in databases, security, and systems programming.

    You get the idea: I’ve been around awhile, and I’ve done enough to be able to gauge whether a new technology or process is valuable or not. And, because I’ve done dev, operations, and DBA work, I think I can offer a solid perspective on the transition to DevOps.

    The Waterfall Method, or, How Can We Fail Big?

    Looking back, Waterfall as we practiced it then was comparable to building a campfire, versus the subtlety and refinement of fireworks, and Agile methodologies.

    Waterfall is the place where we all started (for those of us joining the workforce in the early 90s). That was how software got built: no ifs, ands, or buts. We all “enjoyed” the many hours of building requirements with business analysts, the joint application design (JAD) sessions with clients, the weeks of first writing functional specifications, then moving to the design phase and building design specifications. In the midst of all that, iterating through many reviews with stakeholders under the watchful eye of our project manager.

    Once we got to coding (on my teams, at least) the docs were treated as an afterthought for the most part. Sure we’d open them up periodically to see if we’d missed a requirement, or if there was an argument about some previous decision we’d made. But, most of the time, most of us didn’t code with a document open in one window, and code in another. Sometimes we did, but inevitably we’d hit a section that literally or figuratively says, “magic happens here” (nerdspeak for, I have no idea how that’s going to work) and then go off the rails: the specs never to be seen again.

    When the coding was done, we’d package everything up, and throw it over the wall to QA. QA would start cranking through executing their test plans, doing ad hoc testing, rarely doing load testing, and eventually (through internal iteration – sounding a little like Agile?) would make our software look like the requirements spec, or at least what it was made to look like after the dev team spent a lot of hours and countless emails asking the client detailed questions about how a particular thing should work. QA would then pronounce that version good, and either we (the dev team) or an ops team would actually deploy our software to production.

    Oh, and by the way, I missed another step: the deployment documentation. This file goes here, reboot the system at this point, install this package, upgrade to this version of the database or OS. All that fun stuff got written into documents, and executed by humans, over and over again. And did I mention, that had to be tested, too? And maintained? And that inevitably would result in a developer getting a call in the middle of the night, or during a weekend change window to get things back on their feet?

    Oh, the joys of writing documentation that was out of date almost as soon as it was finished, the deviations from it that occurred when you were building real software to handle real world cases that you never considered during the specification phase. It was almost as if all the docs were completely useless. But, well-paid individuals spent countless hours to build them. They did look impressive, and it showed that we were doing things “professionally”, not just getting out and starting to code something, because that would be crazy.

    I should probably mention at this point that I’ve never been involved in building software for applications that could have life-threatening consequences, or that are one-chance things, where you spend years building the software, and if you don’t get it right, human lives, or millions or billions of dollars can be lost. I think the extreme levels of documentation, planning, and review cycles are still necessary for these types of applications, though I think both Agile and DevOps have benefits to offer parts of these projects, more on that later. In my view, these applications are not ones that lend themselves to lots of iteration, at least not externally: “Oh, I’m sorry, captain, the feature that lets you apply landing brakes is not part of this release. The team says that’s coming in the next sprint.”

    Microsoft Project: The Wrong Tool for the Job

    All this work took a long time, and managers were still under the illusion that project managers could predict the future. Management would say: you have 18 months to get this project done, and we’d open Microsoft Project (as though we were about to build a building or something), and start putting in development tasks. We’d estimate based on our prior experience how long a particular task was likely to take, and schedule it all out. We’d nearly always end up reducing scope at that point to make all our work fit into that short(!) 18-month schedule. I remember spending hours in Project trying to make all the dependencies work, and then seeing the schedule get changed over and over as we changed from one task to another based on what was logical at the time, not what was on the schedule.

    We’d go back to management, and say, this is what we think we can do in 18-months. The more astute project managers would give a best case, likely case, and worst case estimate, all of which would be wildly different. We’d play games like ensuring that the weakest members of the team never became part of the “critical path” (the path of tasks that was packed full from beginning to end, such that missing a deadline would delay the whole project). To try to reduce risk, we’d build risk mitigation documents that listed out all the stuff that could go wrong, and what we were going to do to fix it and get the project back on track.

    Management would take our project schedule, risk mitigation plans, and high level functional spec, look it over, ask some pointed and thoughtful questions, and send us away again to improve our plan. Nearly everyone in the process was competent, professional, and thoughtful. And, in the end, everyone in the process was horribly, brutally, wrong: repeatedly.

    Even if we met major milestones on schedule, it was very rare to actually hit a scheduled end date. Something new would pop up, something would go wrong, something would be harder than we thought, and these somethings would pop up more frequently the longer, larger, and more money we threw at a project. So, as the risk level increased, so did the likelihood of failure. It was almost a foregone conclusion that we’d have to cut scope before the end of the project to try to meet our original deadlines. Or, the team would end up in a death march for months on end to try to pull the schedule back. Or, we’d cut into the time set aside for QA. Or all of the above.

    We learned all too well the old project management axiom that you can have any two of: time, quality, or cost. That is, you can get something fast and of high quality if you want to spend a lot of money to get it. Or, you can go cheap and fast, at the cost of quality. Or, finally, you can get great quality and low cost, if you want to take more time. That was called out especially harshly when iterations were counted in years, rather than months or weeks.

    The funny thing was that we all fought with these problems daily, and we argued with management about how broken the process was, that all the specification and up front planning work (especially when building phone books or mailing lists) wasn’t useful, but in the end, we all just kind of continued down the same path, until the late 90s, when the ideas of Agile development first started taking root.

    Next time, I’ll focus on Agile, my initial reactions to it, and and how it started gaining traction.

  • DevOps Adoption – Startups

    DevOps Adoption – Startups

    This is part 1 of a 2 part article

    DevOps is somewhat unique in that it has applications to both large enterprises and to startups.  The way DevOps is adopted in startups is incredibly different than how it happens in large organizations. The profile of how DevOps is adopted in each of these cases is the focus for this two part article series.

    In this first installment, we will study how DevOps is adopted within startups and in the second, how enterprises adopt DevOps. There are lessons for each in the way that DevOps is adopted. Organizations can leverage this information to enable better, faster, and easier adoption of DevOps.

    Much of the DevOps way is rooted in startup culture. From methodologies such as Agile, lean principles, and just in time manufacturing, startups adopted DevOps as a means to compete, innovate, and move faster. DevOps is inherently a quicker, better way to get product to market – a perfect fit for startups. They could adjust quickly, iterate again and again to get to the point where customers en masse were interested in their technology.

    In order to understand how DevOps is adopted in startups, we need to look at how startups evolve. In the high-tech world, a startup gets going when a founder or group of founders has an epiphany for a new product or service. Generally one of the founders will start to develop the solution by writing some code. The startup may add a couple of developers but it is usually just a few folks cranking out the first version of the product. There is often a business or product focused function where requirements and feedback are gathered from potential users or customers.

    In this first phase, the development team often adopts Agile as a way to quickly iterate on the development process. These short-term sprints build the initial functionality of the product. While initially, there isn’t really much to release to potential customers, the core developers are starting to build their development and release cadence. The short sprint help to keep the functionality requirements small and the team on-track to deliver a small piece of functionality in a short amount of time. This foundation also ends up being an important part of the future development process. And, just as importantly becomes the kernel of DevOps.

    As a small team building the initial releases of the product, the culture and environment of the startup is generally fast, highly communicative with little to no process. Often the development team is sitting side-by-side cranking out code quickly. No specs, just a list of what needs to be done often stored in Pivotal Tracker or some similar tool. Sometimes mockups and screens designed to describe the functionality. There isn’t a rigorous process in the choice of technology platforms – language, database, etc. are chosen often based on what the core team knows or thinks is the right solution rather than on research. This small, agile environment is critical to understand when thinking about how DevOps is adopted.

    There is little formal process at most startups. Things are evolving and moving so quickly that there just isn’t time. The goal, after all, is to get a product into market and start selling. While startups are high adopters of Agile as a development methodology, there is generally little rigor in its implementation. There doesn’t need to be because the team is so small and trying to move quickly. Adding in product management, sales, and marketing functions are often ad hoc. There isn’t a well-developed end-to-end product release process. The movement from development to operations is also less than well defined. Often, the developers building the product are the operations people deploying and managing the product or service. Process gives way to the practicality of just getting things done.

    The first phases of DevOps adoption start to occur at this early stage in a company’s life. Developers as they are building their product often encounter some basic challenges and begin to solve these issues. How they solve them often dictates whether they take a DevOps path or not. One of the first things that developers do is build an environment to test their software. Often, they will find a cloud provider and start spinning up a few instances to host their application. They also may need a database server to round out their testing. They might manually do this a few times, but as they test more and potentially on different platforms they will start to look for some tools to automate this process. Of course, at this stage, there are likely zero operations people, so the tasks fall on the developers. And, developers wanting to spend more time coding pick-up some tools to do this work.

    The tools might include infrastructure providers like AWS, Rackspace, or SoftLayer to configuration automation tools such as Chef or Puppet. There may be a variety of other toolsets chosen as well including project management tracking, libraries, language frameworks, and others. The goal with this first wave of tools is just to save time. That could be by not having to code basic functions, the setup of test environments, or manually tracking tasks. As the organization launches and brings their product or service to market, they may adopt some management and monitoring tools to help them gain visibility into their product or service. Generally at this early stage the decisions are focused on driving short-term problem solving. A developer needs a test environment quickly and repeatedly. A solution to that need is quickly found and implemented. The underlying paradigm is to move fast, solve problems, and get to market.

    While tools are hardly a complete DevOps methodology, they are the catalyst for the next step in a startup’s journey to adopt DevOps. Many of the tools chosen in this first period have APIs, can create automation, and are highly configurable. As a startup keeps moving forward and increasing their users, the flexibility of these tools and the various ways that the developers utilize them starts to drive some conversation around process. A few hiccups in the production environment with some bugs, outages, or failures, and the technical leaders begin to start to say the ‘p’ word. Process. While there may be some Agile components already embedded, the growth of the startup starts to create a desire to add in some control, accountability, and guard rails around the product development process. Many organizations will also start to loop in the business side so that there is a more comprehensive process around releasing a product to market. Agile now starts to extend up and down the organization in a more rigorous way. DevOps is starting to take hold and become more fully formed.

    The early stage DevOps lifecycle wraps up with it becoming a part of the culture. The organization now shifts into a mode where this methodology becomes a fundamental underpinning of the business. Values such as agility, intense customer focus, rapid iteration and others are a part of the fabric of the company and encompass the entire organization. Hiring decisions are made based on whether the candidates match the philosophy and culture of the company. DevOps is viewed as more than just a process that the company follows, but a competitive advantage in fulfilling its mission to its stakeholders. At this point, DevOps is firmly embedded into the organization and becomes its way of life.

    Startups are unique in their approach to adoption of technology and methodologies because of their size, focus, and evolution. DevOps adoption, as we have seen out in the wild, seems to go through some natural stages. While the stages may overlap, it generally follows a tools, process, and then culture sequence. It could be said that some startups just start with the culture of DevOps, and that can be true for some, but many that we see are often so small at that stage that the culture is largely undefined. IT leaders who understand this sequence can become more intentional about the way that DevOps is adopted, perhaps accelerating it or even shaping it earlier in the company’s lifecycle. A little bit from now, our hypothesis is that startups won’t even start without DevOps embedded into their plan.

    In part 2 of this series, we will examine the adoption of DevOps at larger companies.

  • What “Programmable” Means

    What “Programmable” Means

    One of the most often used words these days to describe emerging architectures and technology is (drum roll please) “programmable.”

    Now, from my used-to-be-a-developer-and-architect-turned-infrastructure-geek perspective, I know what that means. It means I get to write code. But to what purpose that code is put to is a question that’s rarely answered. So today we’re going to answer it because, well, my used-to-be-a-developer-and-architect-turned-infrastructure-geek persona likes to talk about code.

    When you hear the term programmable used in the context of Software-Defined Networks (SDN) they’re talking about the same things that “programmable” means in the context of Devops: programmatic control of both the data and the control path.

    The easiest way to visualize the difference between these impressive sounding terms is to recognize that the data path is inside and the control path is outside. 

    programmabilty-illustratedWhat that means is if you’re interacting with the data path, you are participating in it. You can inspect it, evaluate it, and transform it and, perhaps more importantly, you can make decisions based on data in flight. That’s powerful for the network, because a variety of Devops patterns are based on this very concept and require the network for implementation. Consider, for example, the implementation of an A/B testing pattern. The basic premise of the pattern is that somehow the identity of a user is known and, based on their membership in a defined group (beta testing customers, roles within the organization, volunteers from the community, etc…) they are routed to different versions of the same application to determine how differences in the UI impact behavior.

    Notice the term routing, which implies it is a function of the network. The reason programmability is critical is two-fold: one, you must be able to identify the user as belonging to a specific group and two, you must be able to dynamically route based on that information. The former, identification, could ostensibly be accomplished using fixed lists IFF (If and Only If) it is possible to map a user to some variable readily accessible to the network, which traditionally means things like IP and MAC addresses and TCP ports. Most folks will immediately recognize that today this isn’t enough (and actually it hasn’t been enough since the days of the mega-proxy, but I digress). The information that’s needed is much higher in the networking stack at the application layer, aka in the OSI model as Layer 7. Which means you’re probably going to have to dig into HTTP headers and maybe the payload to get the data you want. That requires programmability in the data path, inside. 

    To really make the pattern scale (and to make it flexible enough to support a phased approach to beta testing) you probably don’t want group membership  to be a static, fixed thing. So now you’re going to want to extend your implementation to include making a call to a database or identity store (LDAP, AD, etc…) to get current information. That requires programmability in the data path, inside. 

    So what programmability in the data path means is the ability to use code to direct the behavior of some “thing” in the network, be it an application proxy or a load balancer or what have you. You can’t easily do this through configuration-based proxies because they don’t allow for the execution of the domain logic  necessary. There are a limited number of interactions you can achieve with configuration-based systems because of the logic they’re hard-coded to execute,and most of them don’t include calling out to a data store to look-up arbitrary information.

    Data path programmability = Code in Flight. So you now you know where the name of the blog came from. This developer-and-architect-turned-infrastructure-geek finds the intersection between programmability and networking irresistible.

    Okay, so that’s data path programmability. What about control path programmability?

    Well, that’s the easy part. Control path programmability is on the outside. It’s the APIs that enable automation and orchestration of provisioning and configuration. Control path programmability is how you integrate infrastructure into command control systems like OpenStack, Puppet and Chef. Infrastructure comes with varying degrees of API-enablement, some extremely granular and others less so, depending on the particular function and maturity of the vendor.

    So what you can do with the control path depends on the API, but in general it enables things like provisioning new services – think configuring a new virtual server in Apache and all the settings that accompany it – or start up and shut down functions that enable rolling maintenance across a set of devices or servers to avoid downtime.

    But all control path programmability is on the outside, enabling integration and management without having to learn a CLI or configuration file syntax.

    SDN and Devops use both programmability to reach relatively the same goals: scale of operations, rapid provisioning of services, to decrease the possibility of human error (the fat finger factor) and to introduce flexibility into systems that were previously bound to fixed processing and configuration-based paradigms.

    Programmability in the network is going to enable a variety of new patterns, processes and services and as traditional infrastructure becomes more and more programmable through the adoption of architectural approaches like SDN, Devops is going to see more and more opportunity to apply its maturing expertise in leveraging programmability to a much wider audience.

     

  • Can you appreciate DevOps, if you can’t exactly say what it is?

    I recently had a conversation with some SOX IT auditors and was asked what I meant when I said we were a DevOps shop. I stumbled a little, torn somewhere between an overly simplistic answer and a desire to baptize the unholy. I started by talking about collaboration between the developers and the admins. Mentioning that many of our developers are on call and have sudo access raised some eyebrows. Using Puppet made them pretty happy.

    Thinking back on it, what I realize is that for me devops isn’t a strictly defined thing, it’s a mix of operational changes that draw on the best of any tool, without prejudice. We do what works. We do not do what does not work. If we are doing something, and it ceases to work, we stop doing it. I don’t know if that’s devops, but it’s what we do. And it works. So we’re going to keep doing it.

    Configuration as code

    This is not news, central and key to successful devops is controlling system configuration and change management with code, not with disparate manually managed text files. Here’s the thing, you cannot operate at scale without it. You also cannot change direction, or iterate through rapid change without it. You can rapidly, accurately, and verifiably push changes, stand up environments, or demonstrate a fact to an auditor with just a few keystrokes.

    To be sure, it’s a helluva lot easier to start a business on these principles than to migrate after your business is a real thing. However it’s worth the effort.

    Sysadmins are our friends, Developers are on call

    Most places I’ve worked, neither of those statements were strictly true. At Craftsy, both are. The relationship we foster is one of open collaboration. I’ve never been somewhere where the sysadmins were jerks enough to really justify the animosity they received from dev, and I’ve never met a developer so hopelessly irresponsible to really justify the vitriolic mistrust dealt out by the SA team.

    Give your developers sudo and get them in the oncall rotation. Now, they share a burden with your SA group, and a responsibility to the systems their code runs on. Figure out a sensible rotation and escalation, but without that shared responsibility you will always struggle with trust between your dev and your ops.

    SaaS, Paas, IaaS, CotS, Cloud, OnPrem, Whatev

    The punchline is “all of the above”. Never let yourself get married to a particular way of doing things. We run stuff in the cloud. We run stuff locally. We buy software. We rent software. We rent services. We borrow code. We cloud. And whatever comes up next, we’ll try it one way, whichever way seems to make the most sense. If it works, we’ll keep doing it that way.

    I’ve heard some reasonable objections to Cloud/*aaS based on security concerns. Safely extending the trust relationship of your LAN isn’t easy. It isn’t impossible either. Tools like the AWS VPC offering, or SSO/IAM systems offer some very flexible approaches to open your environment and leverage the best tool, regardless of how it’s made available.

    Do what works

    I’m not sure exactly what the SOX guys thought of my ideas around devops. IT, much like accounting, is an area that traditionally is slow to adopt new approaches. It’s a counterintuitive truth that an industry so deeply engaged with technology is simultaneously so awkwardly regimented in its ways. The standard answer, that change has to come slowly to maintain stability is unsatisfying. Indeed, it belies the fundamental failings of the old methods.

    DevOps sets the table for you to achieve stability in any environment precisely by engaging deeply the technology around you.

  • Ops is dead, long live DevOps

    Ops is dead, long live DevOps

    Yes, that’s a bold statement, but if the vibe at the recent AWS re:Invent conference was any indication there are a number of methodologies, technologies, and companies working to make that a reality. This article isn’t focused on whether this is a good or bad thing (my personal belief is that ops will always be a critical part of the IT delivery process). Regardless, it is critical for IT operations personnel to understand the implications of this tectonic shift. As Marc Andreessen, founder of the venture capital firm Andreessen Horowitz, has said, “software is eating the world.” As a result, ops professionals must have the ability to automate tasks that used to be managed manually. Whether or not you think that is the death of ops as we know it I will leave to you, but it does mean we will live in a world where DevOps will offer distinct advantages.

    Before we dive into what this change means to ops personnel, let’s review the underlying assumptions. The fundamental driver at the a high level has been the DevOps movement. Yes, DevOps is quickly becoming the buzzword dejour, but the underlying principles are lasting and changing IT to its core. DevOps is about integrating the various functions that it takes to release software or applications: software development, quality assurance, operations, and security among many others and rapid iteration. The process of integrating these tasks is accomplished through new processes and automation. Different functional areas such as development and operations are brought into the process earlier, and their processes are automated to the extent that they can be. This results in fast cycle times, increased quality, and hopefully increased innovation for the business. All of this is accomplished through software – at each functional level.

    Some technologies that have enabled this massive shift include Infrastructure as a Service (IaaS), Platform as a Service (PaaS), automated configuration management, server management tools, virtualization, and software defined networking. IaaS and PaaS offerings are eliminating the need for organizations to procure, provision, and deploy servers. Further, this class of technology is also dramatically reducing the need to deal with the network layer. This allows organizations to concentrate on their applications and development, and focus less on their infrastructure. The amount of time and effort spent on server and network configuration is minimized. Configuration management solutions are enabling the automation of server setup. An organization’s technology stack can be pushed, pulled, cloned and copied versus manual configuration thereby saving time and adding consistency. Top performing organizations employing DevOps go a step further and automate the scaling of capacity based on utilization. To reduce day-to-day operational activities and costs, organizations are also automating the management of servers, including users access, patches, security, and other areas through both traditional written code and SaaS solutions. Another area changing the game for ops personnel is software defined networking (SDN), which is effectively morphing data center and hardware functions into software programs.

    In short, DevOps and associated innovative new technologies are driving a paradigm shift in the way operations is done. No longer are ops personnel required to manually provision, configure, and manage the network, servers, and application stack. Combining technologies from organizations such as AWS, Rackspace, and SoftLayer along with configuration tools such as Chef and Puppet drives the provisioning and configuration of applications through software automation rather than manual effort. Once applications are deployed, the underlying infrastructure can be managed with tools such as my own company, New Relic, this author’s own JumpCloud, and others. Ops personnel have more companies than ever focusing on helping them automate the tasks that they need to deliver applications for their organizations.

    The result from all of this effort is that ops as we know it won’t exist in the future. The network operations wizard that could manually troubleshoot routing and switching issues, provision servers quickly, and tweak configurations will be tasked with automating those tasks through software. Some of that automation will be through code that ops person writes herself, some delivered by third party providers, and other portions delivered by open source or SaaS-based solutions. But, don’t shed tears for the forced obsolescence of the IT ops people. They will still exist and perhaps be more important and powerful than ever. In fact, because of DevOps ops personnel will in essence be set free from mundane, repetitive “busy work” to perform higher value tasks as well as managing over the software and systems at work. The black magic of enabling different layers of the stack to function together will be less about art and more about science, or rather good software. Solutions will be engineered to work together and be tied together through code. Caveat: yes, service providers and some large enterprises will  still run their own data centers and networks, but the same reasons that DevOps works in IaaS or PaaS will apply to private data centers or private clouds as well.

    If all of this trends toward being true as we see it happening today, what are the opportunities for ops personnel to be at the forefront of this shift? Beyond embracing DevOps – which many operations personnel are doing already – learning to code is the most critical step that ops professionals can take. Many ops professionals already know how to script which is absolutely a minimum, but many will need to go further. Embrace the DevOps movement and push further towards the development side by learning how to code. There are any number of amazing services to teach us how to code or code better. Take the step. It may be the difference between a vestige of the old school versus driving the new world in your organization. The second significant step you can take is to automate your job. Leverage the very best automation tools to code your network, server, and application infrastructure. Not only will you spend less time on these tasks manually, but you will increase availability, reliability, and performance. In most organizations, that’s more than a gold star. Finally, make the mental shift that operations in the future will be less art and more science. DevOps is driving action through data, and the technology stack is responding to this demand with more telemetry than ever. Problems are now solved through understanding performance, availability, and other metrics. And code.

    DevOps is the future. Automation is key. Code is the answer. Developers and ops are in it together for the good of their organizations. Ops pros that embrace this will win! Ops is Dead, Long Live DevOps!

  • Improving Communication Through Autotmation

    Improving Communication Through Autotmation

    One of the great traits of an organization that adopts DevOps principles or even just an Agile methodology is that everything, and I mean everything, is more dynamic.  While each company will have a different level of fluidity in their processes, Clip Interactive’s source control and deployment processes are very fluid.  As such, we attempt to over communicate when it comes to these parts of the engineering process.

    The primary methods of communication the engineering team and rest of the company have adopted are chat/instant messaging and email.   There are several chat clients out there, all of which have their pros and cons and there is no one right answer except what works best for your team.  At Clip, we have chosen to use HipChat.  Other options include IRC, Flowdock, GTalk, Skype and the list goes on. HipChat was a good option for us because it is cross-platform, supports custom plugins and integrates with a wide variety of tools. 

    In HipChat, each time an engineer pushes code into source control, a build is started, finishes or deployment runs on a QA system a message gets posted to the “Engineering Feed”.  The messages for code pushes include the commit summary and link to the code diffs.  Messages regarding builds and deployments contain a link to their respective outputs.  More significant events, such as deployments to staging and production, get posted to the general chat room where more conversation happens and other non-engineers are more likely to be.  Those notifications are pulled “out of the noise” of the feed.  Additionally, these activities are typically chatted about more before they happened, so they fit more in the flow of conversation.  Last but not least, system notifications, including warnings, problems, recoveries and acknowledgements from Nagios, are sent into the “Operations” room.  To keep everyone informed and spread the knowledge, we post updates and resolutions to issues in the chat room.  All of these messages enable everyone to keep a pulse on the state of the system without being intrusive and should problems arise, to very quickly put together a chronology of events.  Aside from the automated items, there are additional rooms for in-depth feature discussion, production problems and sometimes just for fun.

    Another key form of communication is good old email.  Our build and monitoring systems sends the standard emails and text messages directly to the engineering team.  Each production deployment sends out the list of commit messages, naturally with links to the code diffs.  Since our deployment process is very fluid, this extra notification has gone a long way toward keeping everyone informed on the features being deployed into production.

    Going forward, we intend to add more automated communication around the product management process and system performance metrics.  These automated communications, when added to our normal cadence of meetings, have had a significant impact on getting us closer to the goal of improving transparency in and out of the engineering team, while not making people go out of their way gain value from the tools.

  • The Fourth Seat at the IT Service Velocity Table

    The Fourth Seat at the IT Service Velocity Table

    Agile. Devops. SDN.

    Development. Operations. Network.

    Notice anything missing? How about security? On the one hand, that could be because we’ve finally managed to realize that security is an integral part of every aspect of IT and it’s by default embraced by the other three groups already.

    I’ll pause while you stop laughing and catch your breath.

    On the other hand, it could be because it’s like every other technological movement and advancement and we’ve simply plowed ahead without considering security until, as is always the case, someone remembers that security is important too. If development, operations and the network teams are going to have an answer to improving the speed with which applications get from the IDE to the end-user’s iPhone, then shouldn’t security have a seat at that table, too?

    Absolutely.

    It can be argued, in fact, that some areas of security already have a seat at the service velocity table. Consider automated pen testing, virtual patching and continuous vulnerability assessment services. These are often continuous processes that integrate (sometimes) with existing systems or, at a minimum, with some process through which aberrations can be noted and addressed.

    It’s important to note that this – and devops – isn’t a plea for automation. Automation and orchestration are tools in a toolbox that may or may not be a fit for a particular tasks or process. Most enterprise organizations, for example, refuse to automate changes to data center firewall rules. Not because it can’t be done – it can – but because the ramifications of a change going wrong is too great to take even the small risk that might be incurred.

    But in the interests of speeding up the deployment process (in which security is – or should be – a significant player) there are likely adjustments that can be made to align security with other groups already adopting more agile methodologies.

    For example, consider that along with agile development often comes a “nightly build” of the software, designed to ensure that changes don’t break the complete package. It might be beneficial for application security-focused assessments to be inserted into that process, to test early and often the security profile of the software being developed. This helps in two ways: first, it ensures that developers can be made aware of potential vulnerabilities while they’re actively developing the software. That’s important because one of the precepts of agile is move quickly and by the time you’ve found a vulnerability in the released software the developers are already half way through the next spring and not thinking about what they just tossed over the wall.

    Second, if there are vulnerabilities that turn up that developers can’t, for some reason, address you have a head start in figuring out how to mitigate them. If that requires a security service of some kind, you’ve got time to get the right policies into place before the application hits the Internet and becomes a target.

    There are plenty of ways in which agile methodologies can be adopted by security professionals. One of the precepts of devops is getting outside the silos that exist within the organization and communicating with the other folks seated at the “get the application to the user” table. Being more involved with development and operations and even the network will enable security to integrate more fluidly with the increasingly agile processes that drive the application lifecycle.