In the early days of software development, development teams had to rely on IT Administrators and Database Administrators to spin up architecture and assets needed for day-to-day software development. These groups were often at odds with each other and frequently working towards differing objectives, which could cause challenges in efficient and effective software development. In the late 2000’s, as the agile software development methodology began to take hold, there was a movement to end this separation. As discussions within the tech community took shape, Patrick Debois coined the term “DevOps”, which is a portmanteau of the words “Development” and “Operations”. DevOps practices have since grown and matured with an entirely new market of DevOps related products and services springing forth. At MercuryWorks we have ardently embraced DevOps principles and seen firsthand the impact they can have on improving our ability to ship quality software on a consistent and repeatable basis.
What is DevOps?
DevOps is a movement to bring together developers writing code and operations deploying code together under a unified platform to provide a faster, more reliable way to release code to market. In the world of Agile Development, DevOps makes sure that the developers only have to worry about the code they are producing.
This lead to the creation of a new role in an Agile team called “DevOps Engineer”. This person’s job is to make sure that the team has all the things they need to succeed with regard to infrastructure. They are present in Agile ceremonies to better facilitate the deployment process. Depending upon the size of your company there could be a single DevOps Engineer or a team of them sharing the company responsibilities. Not only do they make sure processes are in place to automatically deploy code, but they are also advocate for improving these processes to make them increasingly stable and more efficient over time, regardless of where you’re starting from.
Why should you automate pipelines?
Before pipeline automation became a stable practice you could hear around the office the horrors of a deployment gone bad because the process was to FTP files up to a server or use a Publish Profile created by Visual Studio. One of the most important tools a DevOps team has is the ability to automate Builds and Releases for your development teams.
Automated builds and release take the stress of getting the code into your hosted environment off the development team. In doing so they also instill better practices that provides a consistent, reproduceable process for building a code base and pushing that code out for use. No longer do you need rely upon checklists and hope that a developer follows them correctly each time they need to publish code. Everything is tracked in your build and release history for organized and streamlined management. Also, should something not look right upon release, you can quickly roll back a deployed release without having to checkout specific code commits and rebuild locally.
Your DevOps Engineer makes this all possible by the use of pipeline templates that are stored with your source code. In Azure DevOps, this practice can be a build file and task-based release or a single yaml file that has all stages of the process, Multi-Stage Pipeline. Here at Mercury, we have converted all our processes over to Multi-Stage Pipelines. This provides a single location to track anything you need with a build and release. Pipeline maintenance is simpler now that you only have a single file to track all your deployment changes.
Why should your pipelines control your assets?
With the evolution of the DevOps Engineer, processes are forming that make Asset management easier to maintain. Instead of a member of your development team going into Azure and creating one-off resources, you have a DevOps Engineer on your team that handles all of this for the team.
More recently, the big push has been towards Infrastructure as Code (IaC). This is the practice of creating all your cloud-based assets using yaml template files that can be stored with your applications source code. This ensures that all the assets needed to run an application are always in a desired configuration based on values in your templates. If the asset does not exist in the target cloud environment the template will make sure that the asset is created with the desired configuration prior to deploying any source code. In this process the template also becomes your source of truth and knowledge for all assets created. If someone with access manually alters a cloud asset, say to boost the power of an App Service, that change will be reverted the next time the pipeline runs to deploy code.
A few added benefits of storing your templates in code include code versioning and quick reproduction. Code Versioning is a handy tool for all developers. It allows for a historical review of your repo to see when certain changes were made, or rollback changes due to a bug. The same feature can be used by your DevOps Engineer that is controlling your templates in code. They now have the added value of being able to go back into the commit history and see exactly when certain changes were made to alter the cloud assets. If something ever happens and you need to quickly spin up a new version of your asset, having the template in code and running in your pipeline is a huge time saver. All you need to do is to rerun the step in your pipeline to have the asset recreated to your exact specifications.
Why does this all matter?
With the addition of a DevOps Engineer to the mix, you’re able to more efficiently and effectively manage your code, releases and infrastructure. This will help your team deliver quality software solutions faster. Beyond the support of new development and release management, a DevOps Engineer can work to monitor, manage and maintain your application infrastructure to ensure optimal performance. This allows your developers to focus on the task at hand, creating robust software in support of your company’s business objectives.
DevOps has become an invaluable component within software development teams. DevOps practices are the cornerstone that allow for scalable growth and effective application lifecycle management. If you’re not currently utilizing DevOps within your organization, we’d strongly recommend you do. You’ll quickly realize the benefits of faster deployments, improved product quality, continuous delivery of software, and a more stable work environment.