DevOps—it’s not just the latest buzzword from the IT sphere. It's a paradigm shift in the way technology companies look at the marriage between software development and the infrastructure that powers it.
It’s wrong to assume that only enterprise businesses can benefit from or need a DevOps strategy. Whether you are an organization the size of Facebook or a one-man tech startup, DevOps is now a way of life and ignoring it can make or break a company of any size.
Defining The Buzz
So what is DevOps? Well, much like the name states, we are talking about a union of Developers and IT Operations (aka Systems Engineers). DevOps is many things. It is a collection of best practices, a set of tooling and a philosophy that emphasizes automation and collaboration.
The term “DevOps” emerged from the fast-paced "agile" software development movement. Agile practices encourage short iteration cycles, frequent new function releases and close collaboration between development and business stakeholders. It's made quick revisions a common practice, which in turn has increased the need to produce software in a way that delivers ideas to market in a much faster model. Both established companies and startups are racing to test their innovative ideas and provide value for their customers.
If you aren't adopting DevOps practices in your own technology projects, then you may be wasting time and increasing the risk of delay on your technology projects and costly technical debt. And the time to start is soon; DevOps is easiest to implement early on in a technology project’s life cycle. The longer you wait, the more effort will be required to re-work DevOps into your workflow.
If you are building a startup, this kind of speed and iteration is the name of the game. When you’re developing software for a particular customer, you must determine which features are valuable to them as quickly as possible. Or if you adhere to “Lean Startup” ideologies, then your goal is to eliminate time wasted and focus more on value.
For Lean Startup in particular, utilizing DevOps is a major component of eliminating the waste that occurs around provisioning new servers, installing and configuring software, and doing deployments across environments. Without a proper DevOps strategy, these tasks can become prone to errors and are time-consuming. When this process is automated, features move into production faster, which allows them to be tested and validated more quickly, leading to faster reaction time to your customers and less wasted effort.
How To Do DevOps
Implementing a DevOps process usually starts with adopting an automation platform, like Chef or Puppet. Chef has been taking the IT world by storm as of late, and has been adopted by both large IT organizations—like Facebook—and small teams in startups all over the world. Once an automation platform has been adopted, it is used to code all systems related configuration and deployment. The idea is to remove the human component of manually configuring servers or deploying an application across multiple environments and multiple servers.
Your automated configuration will need to be deployed somewhere, too. Cloud-based systems are where the full power of a DevOps process can be realized. Though it can be implemented in traditional non-virtualized data centers, much of DevOps' true capabilities are lost in this type of implementation. Cloud is where DevOps really shines.
Using tools like Vagrant, the efficiencies gained from the automated setup of cloud servers can also be realized in a local developer’s environment. Vagrant allows for the same scripts that are powering the production cloud servers to be used to setup local developer environments.
But the current pace of software development still needs improvement, as it will go from a developer’s workstation, into quality assurance (QA), and finally into the production environment. In traditional technology teams, this is when the code leaves the developers and goes into the hands of a systems engineer, who feverishly work their magic, on a server they crafted by hand, to deploy it to the world.
So, what are the best practices of DevOps? Why should you use them? And how do you get started implementing them? Read on to learn all the answers to your DevOps questions.
Reason One: Inefficient Use Of Time
So, is DevOps always going be the solution to every organization? Many CTOs in enterprises agree there isn’t a problem when releases are happening once a day, on only a few servers and that the software is not complex. If all goes well and the systems engineer makes no mistakes, this process may take less than an hour, making everyone happy.
However, this is rarely the case—more often, there are several releases a day, across half a dozen servers and software begins to accumulate some time-consuming deployment complexities. Also, imagine that the trusty systems engineer didn't have her morning coffee, and the boss is pressuring her hard for that much-needed feature release.
Oops, a step is missed. Deployment fails halfway through, and now it takes 30 minutes to roll the servers back, all the while showing the much-despised error message to users. Or worse, imagine the systems engineer moves on to greener pastures, taking months (maybe years) of the system’s knowledge with them that the next recruit will have to acclimate by digging into the nooks and crannies of the ever-evolving infrastructure.
Startups are particularly susceptible to problems like this. When the very success of your new company relies on getting new code into production, anything that slows down “ship day” is unacceptable. Adopting a DevOps strategy early on will allow each deployment to become faster and faster, making for shipping a new build of your app something that can happen every week, not just every few months.
Reason Two: Stability, Predictability And Testability
Like Agile's emphasis on collaboration between development and business, DevOps is all about the close collaboration between development and IT operations. One of the defining principles of this collaboration is leveraging the stability, predictability and testability of code. The emergence of "coded infrastructure" is made a reality by configuration management (CM) and aforementioned data center automation platforms like Puppet from Puppet Labs and Opscode's Chef.
These tools enable developers and infrastructure engineers to find common ground, allowing the systems that power software to be described with fine granularity using code. For example, Chef uses Ruby code to create "recipes" that automate the building and deployment of a server from the ground up. This type of "Cookbook" coding, used by major companies like Facebook, Ancestry.com and Brightcove, enables those companies to rapidly deploy new code into production and scale up and maintain their ever-growing server farms.
Another added benefit of infrastructure as code is the ability to use automated testing practices, common in traditional software development environments, to prevent changes causing regressions, which could bring down critical infrastructure. Libraries, like test-kitchen for Chef, enable you to write a full suite of integration tests to keep your cookbooks regression-free, which can be integrated directly into a continuous-integration workflow with tools like Jenkins or Bamboo.
Reason Three: Build An Inventory Of Code To Create Efficiencies
Another benefit DevOps provides is the inherent "self-documentation" CM systems like Chef create. Now that the entire server is being built from the ground up by code, it provides an inventory of all the supporting software and configuration specs. This doesn’t mean we can get away without additional documentation on infrastructure, but it provides a well-established baseline that any engineer familiar with the chosen configuration management platform can quickly learn.
Startups should be able to scale to survive. The accepted method of scaling infrastructure is horizontal scaling, or adding additional servers to the infrastructure that handle smaller parts of the overall system. This means that if a startup plans to scale, the company will need to be able to add new servers to the system as quickly as possible—which can be made possible in no time with a proper DevOps plan in place. Since CM is a huge part of any solid DevOps process, automated scripts will allow you to implement and manage the growing server infrastructure easily and efficiently.
An investment in DevOps and infrastructure automation helps to keep resource costs low, while maintaining output at the desired velocity. With the focus on automation, a single engineer can run an infrastructure of non-trivial size. For example, at Facebook, a team of four engineers is responsible for rolling out and maintaining a system of roughly 15,000+ individual machines using the Chef system automation platform.
But these efficiencies are not just gained in the enterprise. In a startup, where resources are tight and engineers can sometimes be hard to come by, a DevOps platform can allow for a software engineer to double as an operations engineer.
More tools like Puppet and Chef have become available that make implementing DevOps within any organization easier and faster. The ecosystems for these DevOp platforms and tools for all skill sets are released frequently, which make implementing DevOps achievable for any organization. Tools like Vagrant provide a way to test creating infrastructure using Puppet and Chef—which can be done on an engineer’s local computer. Also, systems like Berkshelf are making it effortless to manage a growing collection of automation scripts and leverage an ever-growing community of contributed code.
DevOps has clearly moved beyond a mere buzzword—it now describes an entire process that is essential for IT organizations of all sizes to adopt. In the same way IT organizations have adopted Agile as a methodology, in the near future, we will all look back at DevOps as another de facto evolution of the IT industry.
While its shape and form continue to evolve, one thing is certain—if you make your living in coding, whether at a multinational enterprise or a budding startup, adopting DevOps is a necessity. Adopt or be left behind.
Lead image courtesy DevOpsDays, DevOps image courtesy CollabNet.