The term DevOps is a frequently used in the software development community; however, it means different things to different people. In this article, we are going to explore the origin of the word along with various definitions.
The term DevOps was first mentioned during a presentation by Andrew Shafer and Patrick Debois at the Agile 2008 conference. The term gained traction during 2009 during a series of DevOps days in Belgium. DevOps is a compound word derived from software DEVelopment and information technology OPerationS.
What is DevOps?
Well, it depends on who you ask. Here is a sampling of different definitions:
- Amazon Web Services: DevOps is, “the combination of cultural philosophies, practices, and tools that increase an organization’s ability to deliver applications and services at high velocity.”
- Atlassian defines DevOps as a “partnership between development and operations that emphasize communication, collaboration, and integration.”
- The Agile Admin provides this definition for DevOps, “the practice of operations and development engineers participating together in the entire service lifecycle, from design through the development process to production support.”
For an even larger sampling of definitions, see this thread on Quora: What is DevOps?
As you can see from the above quotes, the definition of DevOps can vary widely. However, most of them share the following four elements:
1. DevOps is a culture.
2. Collaboration and trust are the linchpins of DevOps.
3. Agile principles are core DevOps practices
4. Measuring and sharing results boosts delivery cycles and product quality.
DevOps at Level 12
At Level 12, DevOps isn’t really a separate “thing” that we focus on. We don’t have a huge infrastructure to manage, like many of the companies out there talking about DevOps. When we manage servers, databases, network, etc. they are almost always directly related to the software applications we are developing. So, there is naturally tight collaboration between system administration and DevOps at Level 12. In fact, we don’t treat them separately. The people who manage the servers are also the developers that regularly build software applications for our customers.
However, outside of server and networking infrastructure, there is another idea that fits into DevOps that we like to call “developer ergonomics.” This is the idea that we have our infrastructure setup and have tools in place to make the process of developing, testing, and deploying software as easy for the developer as possible.
Some of the technologies and services we use at Level 12 that fit into DevOps:
- Our server and networking infrastructure is hosted mostly on Linode, but we have also explored Amazon Web Services for some projects.
- We use Ansible roles and playbooks to manage our servers and deploy our applications.
- CircleCI for continuous integration (CI) support and specifically running our automated test suite. We also use AppVeyor when CI for Windows tests are needed.
- Codecov for test coverage report. We love how Codecov integrates with GitHub pull requests (PR) so that we can see how a PR will change code coverage of the application.
- GitHub for developer friendly code repositories and integration workflows using PRs.
- Docker for smoothing out OS differences between CircleCI and production. We currently avoid Docker in production for the reasons described in: https://www.level12.io/blog/container-fundamentals-deployment/
- Codetree for better project management options than plain GitHub issues gives us.
- Logzio for, you guessed it, log management and log alerting.
- Sentry for application exception reporting and alerting.
- Monitis for server and service monitoring and alerting.
- Slack the glue that binds our team and notifications from many of the services above together.
What do you think?
What are your thoughts about DevOps and our opinion of what it means? Share your thoughts and opinions in the comment section below. We look forward to your input.