If you’re a software engineer whose world begins and ends with coding, you’re limiting yourself. There are many of us who believe that our only focus should be to contribute lines of code to create projects or add new features. Sure, that’s the foundation of the role, but the opportunities beyond it are endless. For your code to create maximum impact, you must be a well-rounded member of your team, especially if you’re working in and across large teams. There are lots of ways to broaden your expertise. My favorite? DevOps.
As a developer, you may question the reason for understanding the whole DevOps movement, which is the collaboration and communication of both software development and IT operations while automating the process of software delivery and infrastructure changes. Why bother focusing on how to provision your infrastructure, deploy and test your code, or understand your network requirements? We have entire roles created to tackle those tasks. As engineers, we simply need to code, right? Wrong. We are more than the code we write and require more understanding than the languages we know. DevOps is something we developers need to explore to become better engineers who deliver the best solutions for our customers.
We also do this by provisioning infrastructure that is resilient and scalable in minutes, encompassing testing, automation, infrastructure, and quality coding. Most importantly perhaps, we solve problems by collaborating with team members to enable quick delivery of complex features.
Simple, right? When you get down to putting DevOps into practice, I’d say yes. It’s the means to deliver the best products as quickly as possible, in the best way we can, with the tools that we have. At Capital One, our teams employ DevOps across the company. Case in point: Tech SVP Gill Haus shared his best practices for leaders to integrate DevOps into their teams.
As software engineers, we have an opportunity to lead the way in DevOps integration. Here are three tips for developers to take action and start automating development to contribute beyond your code:
Use modern source control.
If your code is floating around on your desktop or disrupted in an older source control system, ensure all of your code (i.e. application and infrastructure) are in modern source controls management system like Github and Bitbucket.
Automate all of your application’s quality checks.
When you get your code in source control, you may have skipped ahead to automatically building and deploying your application. If you rely on manual checks later to test your application, you will inevitably face obstacles to roll back code merges and possibly fight bugs in production that could have been caught with a quality check. Develop unit tests like JUnit, PyTest, and GoTest — and don’t forget about mocking. Run static analysis such as SonarQube to ensure code quality and CLM, or Fortify to verify security. Be sure to configure these checks to run automatically as soon as you check your code into the SCM you setup in Step1 (look into webhooks and orhcistration servers like Jenkins for this configuration). Even better, you can check into SCM prior to merging to your main code base to prevent smelly code, or code in need of refactoring, from entering the pipeline.
Automate code builds.
Eventually once your code has passed all the necessary automated checks and is ready to be deployed to a server you’ll need to create a deployable artifact like a tar, war, jar, or even zip file. These files can be created using a variety of build managers like Gradle, Maven or NPM to download decencies, compile code, and provide all executable and configuration files needed. Enable this step to run automatically once the code has been merged in with an orchestration tool like Jenkins.
And once you’ve tackled these, be sure to reach out to your network / team to explore options for understanding how to build infrastructure. Or you can even try running a tutorial on a cloud provider. If your infrastructure builds and automated deployments have been configured for you, try to understand how they work so you can help contribute and solve issues as they arise.
All of these suggestions are where I began on my DevOps journey and have allowed me to develop as a successful engineer. I hope they will also help you be a well-rounded engineer who wears not only the developer hat but the hat of the architect, tester, automater, and deployer, and push your customers towards great solutions at the speed of light.