Terminology and complexity can make any new concept scary. As a combination of both Software Dev(elopment) and System Op(eration)s, DevOps can be intimidating, as it inherits concepts and jargon from two different worlds of modern technology.
While DevOps does have a lot of lingo, a number of TLAs (Three Letter Acronyms) and a hefty learning curve, I’m here to tell you that there is plenty to be gained from just a little dip into DevOps.
Our ultimate goal with DevOps is to create consistency and repeatability when anyone on our team needs to perform any combination of development or systems tasks. A core principle of DevOps is that those who create the custom software and those who keep those software systems running should have a strong collaborative relationship. A solid DevOps approach will empower your team to evolve infrastructure alongside software with your project.
Origins of DevOps
Before DevOps, the software team typically would have pushed out code changes, leaving it to the operations team to install, run and upgrade the systems that the code ran on. Often, there might be issues with mismatch dependencies, conflicts with operating system patches and any number of differences between various environments, like production, test or quality assurance. This “fire and forget” model was prone to create hostility, resulting in a developer’s all-too-familiar “works on my machine” response to a bug report.
Just as Agile helped improve the quality of software, both in its output and in the mental state of those working on it, DevOps aims to improve the quality of the delivery of that software. With a focus on transparency and quality, DevOps is good for developers and good for business.
DevOps is Good for Developers
You may have heard that developers like to automate things. DevOps from a developer standpoint is the same kind of automation used in software, applied to infrastructure. It can be nice to click around in the wonderful administration panels that cloud providers have built, and that is a great way to get familiar with a new system. But configuration via those interfaces doesn’t scale. You are much more likely to make a mistake — either in misconfiguration of a resource or security rule, or in just leaving something running when it is no longer needed — if you are manually creating and tearing down cloud resources through multiple different screens and interfaces.
- Scalable Configuration
Infrastructure configuration tools like Terraform can instantly give you granular, repeatable and trackable control over your cloud resources. Its easy-to-read syntax will clearly show you how you have your various security groups configured, and make management of hundreds of AWS resources a simple task. Whenever a developer needs some additional resources, it’s just a few lines of code and a quick command.
Have you also heard that developers don’t like to write documentation? Great news! By using modern DevOps tools to capture your infrastructure and deployment steps as code, you’ve created a set of files another DevOps practitioner can read and instantly get up to speed with what your system looks like and how it behaves. Sure, a few diagrams and good comments would help, but many of the specific details about security rules, networking paths and overall cloud resource setup is captured by the infrastructure as code systems of DevOps.
DevOps is Good for Business
- Resource Utilization
A large component of DevOps is getting control and understanding of your infrastructure. This has immediate and financial implications for the business by making it clear what infrastructure is running, and how it is over- or under-utilized. By using code to create infrastructure, you can create a workflow that leverages peer review to ensure no servers are created unnecessarily. Developers and Operations personnel can collaborate on the infrastructure needs within the tools they are already familiar with.
Another important tenet of DevOps is creating repeatability. By configuring resources with DevOps tools, you can ensure that the various test, staging and quality assurance environments for your application mirror that of production. This means configuration and resources are as similar as possible, and it reduces the chance of bugs being introduced into the product due to deployment differences.
- Disaster Recovery
This repeatability also has major implications in disaster recovery. Should a system need to be recreated, the infrastructure as code from a good DevOps workflow makes standing up a new system easy. Collaboration between developers and operations also helps bring the development team into the conversation around disaster recovery, empowering them to make technical decisions within the product to aid in fault tolerance and recovery.
Finally, the best engineers want to work in a cutting edge environment, and one where they feel empowered to do their best work. DevOps is an approach that allows all engineers who interact with your digital systems to contribute in a meaningful way, and gives them access to the tools and resources they need to do their best work for you.
DevOps is Approachable
Hopefully I’ve convinced you of the merits of DevOps, but you may still feel like it is overwhelming and just more complexity than it is worth. The wonderful thing about DevOps tooling is that you can start small and build over time. A great way to get started is to pick a specific pain point and look to resolve it via an infrastructure-as-code project. Here are a few projects you might start your DevOps journey with:
- Manage Security Groups
Are you struggling to maintain and understand your AWS Security Groups? Define them with Terraform! Now you won’t need to click through a number of screens in the AWS web console to determine what your ingress and egress rules are, just read through your Terraform files and see it all enumerated in one place. Then with a simple command, adjust IP whitelists or port ranges as needed. Terraform will also allow you to import your existing resources and start managing them there even if they weren’t originally created by Terraform.
- Consolidate Deployment Scripts
Are you finding deployment to be a hassle? Consider moving your ad-hoc scripts into Ansible, and embrace a world of idempotency, where Ansible can determine if a file is unchanged and thus not perform certain actions. If you’ve been feeling overwhelmed by your existing approach to managing servers, trying to wrap your head around changes you are applying, Ansible’s change focused output can be very calming. Once your system is configured via Ansible, adding additional servers to scale your product is even easier. As your project grows, you can update all your servers at once with ease. As you continue to use Terraform to create new servers and add them to your load balancers, Ansible will streamline the application setup and deployment to those new instances.
- Orchestrate Containers
Do you have a number of Docker images that you need to orchestrate into a complex deployment scheme? Now you are ready for Kubernetes. With the rise of microservices, we are now seeing applications that are a collection of many small applications. This is where Kubernetes can really shine — helping to bring order and optimization to a collection of Docker Containers. While Kubernetes can be a confusing mess of YAML files, you can start with simple definitions to bring containers online, and plenty of cloud based managed Kubernetes systems to deploy to. There is a large ecosystem of additional tools to help with Kubernetes management, Helm and Rancher to name a few. Kubernetes is definitely overkill if you don’t need it, but when you do, it is a powerful tool for managing complex systems while maintaining a minimal number of underlying servers.
DevOps Grows With You
Modern DevOps provides flexibility and the ability to iterate as your needs change; you can start small and grow your DevOps practice as needed. Don’t be intimidated by all the possibilities; focus on the areas that will have the largest impact for your business. DevOps brings very real benefits for your product and personnel, especially as your company and technology evolves. And if you do need a helping hand as you’re evaluating your infrastructure needs and upcoming growth, the team here at SmartLogic is always happy to talk and help you find your best path forward.
When a health condition threatens your tech career
How to be a (better) human in tech
5 thoughts on science and discovery from Nobel laureate (and Johns Hopkins professor) Gregg Semenza
4 autism-friendly event strategies that will benefit everyone at your next conference
Sign-up for daily news updates from Technical.ly Baltimore