Explore the evolution and principles of DevOps, emphasizing the importance of collaboration, mindset, and continuous improvement. Effective DevOps involves cross-functional teams, the right tools, and a commitment to ongoing learning and adaptation.
There are many articles and topics currently available for delivering business value better and faster. Subsequently, many more organizations and teams are adopting common software practices - even outside of the usual use case of delivering software (take, for example, SpaceX teams working agile, or leadership teams that use scrum practices and have stand up calls). This progression into faster, better, cheaper, easier leads into the topic of this blog post, where we’ll provide a beginner’s guide to DevOps and what it takes to achieve and incorporate DevOps into business value delivery.
A great perspective to consider for understanding DevOps is how technology has changed how we build, connect, share, and educate. Up until the 2000s, the de facto turnaround times for photographing and sharing pictures would be 1-3 weeks, if not longer. This process would involve film cameras and darkrooms to process photographs. Today, mobile devices allow us to snap hundreds of images and share them immediately online. These changes in the world don’t only apply to photography but many other industries, including Financial Services, Banking, and IT Technology.
Software delivery, in the past, consisted of traditional waterfall methodologies that offered little flexibility to the nature of change and demand for technology services today. Software delivery now is about using DevOps to leverage new insights through people, processes, and technology, giving organizations the ability to deliver business value continuously.
For our technology organizations, this process for delivering business value is modeled through the DevOps Lifecycle.
Very often, our challenges with DevOps do not lie in the technology or processes, but in how we work together to deliver with our cross-functional teams. In order to understand what building a DevOps culture means, we need to comprehend what culture encompasses and how our people, process, and technology work together to enable a successful DevOps lifecycle.
I like to consider DevOps to be a layered process made up of:
· Mindset
· Values
· Principles
· Practices
· Tooling
Getting to a DevOps culture involves articulating change both from the bottom and top of our organizations and is, therefore, no easy feat. Before we can introduce or discuss tooling, we need to understand how our practices and principles help us achieve our outcomes. Before we can set practices, we need to understand the underlying principles of use. Each inner layer requires the outer layer before we can truly get to defining and strengthening a DevOps culture.
Here are my tips for getting to a DevOps culture:
· Develop from mistakes
· Focus on the important
· Capture collaboration
· Perfect your tooling
To summarize up to this point, DevOps is the collection and collaboration of people, processes, and technology to deliver software value continuously. Let’s discuss some core DevOps principles to eventually share some tools and practices you can use for your DevOps journey.
High-performing teams work best when leaders and individuals understand their role in the team. Therefore, creating with the end in mind involves reassessing and often asking big picture questions, like “Who is this delivery for?” and “Why are we doing things this way?” Realizing the deliverable is about keeping the vision in mind and making adjustments along the way.
Famous photographs in history involved many adjustments and attempts. Creating with the end in mind means knowing we may not have everything right the first time around. Similarly, life isn’t without its own distractions, conflicts, and changes. Keeping the target outcomes in mind helps us align to initiatives and actions and question when they don’t align.
Many productions and deliveries involve more than one person. For example, our best MCU movies were made thanks to the help of multiple production teams and companies coming together to build what we know today and some of the best superhero movies. We succeed with software delivery in the same way by having fully responsible cross-functional delivery teams.
The best engineering teams I’ve been on contain independent and autonomous individuals that know how they can contribute to the work in progress. They’re also willing and unafraid to collaborate with others in order to get this work done.
“I am not here to be right. I am here to get it right” - Brené Brown, from the book Dare to Lead.
Even with our cross-functional delivery teams and creating with the end in mind, our teams still may not have everything right the first time around. Committing to DevOps is about accepting this and any failures that come from the journey. Committing to the journey doesn’t mean you can’t define what it involves. Experimentation is also a part of how we will adapt and adopt novel approaches from delivering faster, cheaper, and better software.
Use these principles as the foundations for how to work together, use tools, and define and improve processes. In photography, there are three components that serve as building blocks to the final images we capture: aperture, shutter speed, and ISO. In DevOps, it’s our people, processes, and technologies. Achieving high-performance with DevOps involves all of these components working together and adjusting to our environment, situation, or team.
The key to getting to the results you desire: Not getting blindsided by any single component of getting to the result.
Now that we understand the mindsets, values, and principles of DevOps, we can begin sharing DevOps practices and tooling. I like to consider this section like the one that calls our teams and individuals to gear up! No reasonable photographer would leave for a photoshoot without their camera and camera gear. Similarly, DevOps practitioners and teams need the right tools to get the results needed.
Source code management is about allowing teams to collaborate, version, correct, and revert software code. This is fundamental for many teams to increase not only visibility and collaboration, but also start automation workflows.
If you are an individual just starting out, I recommend learning the basics of Git, such as how to add, commit, push, merge, branch, and clone code. If you’re a team, I recommend discussing practices and standards you want to use for collaborating. Always fit your Git structure and workflow to your codebase and team dynamics.
Continuous Integration (CI) takes code away from local machines to package code into a deployable artifact in a CI server. CI is about automating the integration of newly committed code changes. This process is often triggered by code changes pushed into your Git repository. Using checks and other tools, teams can version and release artifacts that have been vetted for quality and security.
Continuous Delivery takes artifact code to production environments. CD aims to deliver code changes of all kinds to users in a fast, repeatable, and safe manner. CI/CD consists of both CI and CD pipelines working together to deliver code to users.
Infrastructure as code is a practice that allows users to define hardware through code. The goal of delivering in a DevOps matter is to improve how we can provision, configure, and maintain hardware systems. Infrastructure provisioners like HashiCorp’s Terraform and AWS Cloud Formation, configuration automation tools like Ansible, puppet, chef, and Package Managers like Helm allow teams to accomplish much more when software scales and demands increase.
Security is everyone’s responsibility. Secrets management and identity management tools make accomplishing DevSecOps easier by securing and managing sensitive information. Teams should consider how they are handling secrets and users within their architecture. HashiCorp Vault, KeyCloak, KMS, and other similar tools can help you achieve your goals around security.
There are many other practices and tools DevOps teams and organizations can use to achieve their desired outcomes. What works for one team may not work for another - hence the need to innovate and experiment in a controlled and well-led manner. Other practices that can increase your team’s ability to deliver value include value stream mapping, progressive delivery, GitOps, and chaos engineering.
People, processes, and technology belong together in a DevOps culture. While practice makes perfect, it’s more about getting the right answers along the way than coming in with the mindset that everything has to be right the first time around. Just remember that no leader, individual, or team in DevOps is alone. We started this blog post defining what it requires to build a DevOps culture, change mindsets, and set principles and practices, so I leave with one takeaway to ask you: What does DevOps mean to you?