By Michael Johnson, Performance JETS Defense Leader
DevOps is the latest and greatest step in the evolution of software development practices. The step from Waterfall to Agile corrected many of the issues with traditional development strategies, but DevOps brings the tools and techniques that are so necessary to make many of the principles espoused by Agile effective and successful.
Especially in safety-critical industries like aerospace and defense, adoption of DevOps development strategies can seem controversial. In these industries, it is necessary for software to be right the first time, and new development methodologies can be looked on with suspicion. However, organizations like Raytheon, Lockheed Martin, and the U.S. National Security Agency (NSA) have publicly embraced DevOps and shared how it has enabled them to achieve their objectives within shorter project timelines.
One of the biggest advantages of DevOps from a cybersecurity perspective is that it gives the defender the advantage over the attacker. Traditionally, the asymmetry of cybersecurity, where the defender must close all vulnerabilities but the attacker only needs to find one, has made secure development a difficult and tedious process. However, with DevOps, developers have the tools and techniques that they need to ensure that their code is correct, and secure, at every stage in the development process.
Key Components for a Successful DevOps Strategy
Like any development strategy, it takes more than lip service to the rules to make a team successful. Teams with the best intentions can apply DevOps strategies to their work and use DevOps tools and still be unsuccessful. In order to create a successful development program based on DevOps, an organization needs several key factors.
Executive Buy-In
Having support from upper management is crucial to any kind of major process change, including a switch to DevOps. A team using DevOps principles for development looks and operates very differently from one operating using Waterfall or other traditional design methodologies.
Making the switch to DevOps may require changes to processes, reporting, deadlines, etc. and have some rough patches as the team adapts to the changing environment. For this transition to happen successfully, management needs to be both supportive of the change and willing to take action to ease the way whenever possible.
Small, Stable Teams
Breaking in and adapting to a new development team can be a time-consuming process. Every developer has their own quirks, and it takes time for each member to understand each other’s strengths, weaknesses, and idiosyncrasies. The time before the team achieves this level of cohesion can be a stressful and inefficient one, so a key factor in DevOps success is, once a good team has been created, to allow them to continue working together.
Part of what makes a team effective at DevOps is its size. DevOps strategies are designed to facilitate more rapid development, and this is accomplished partially through clear communication and taking advantage of the knowledge and strengths of all members of the group. As the group size grows, their ability to communicate fully and effectively decreases. As a result, DevOps development strategies are often best applied to small groups working on projects scaled to meet their capabilities.
Co-Location of Teams
Another component that has an impact on a team’s ability to communicate is whether they are co-located. Modern technology has made great strides toward making remote communication fast and easy, but there is still some overhead involved in communicating with a remote team member.
This can have a significant impact on both how and how well a team communicates. In many situations, there are problems that may take hours for a single person to work out but could be solved in a much shorter time with a little input from a team member. The probability of these necessary interactions occurring when they need to is much higher if a team member can drop by for a quick chat instead of relying on the other party to be checking email, Slack, etc. A co-located development team is much more likely to achieve the necessary synergy that makes DevOps so effective.
Loosely Coupled Architecture
Beyond having small teams that are comfortable working with each other, it’s also important to design the DevOps project to take advantage of their strengths and knowledge. Software developed using traditional practices often is monolithic and has separate development and test teams, which means that testers often do not have the familiarity and knowledge of the project necessary to do their job effectively.
A well-designed DevOps project is architected so that small teams can be completely responsible for their product, from ideation through testing, and so that the interfaces between components are well-designed and documented. This ensures that each piece of the software receives the level of attention that it deserves and that no issues creep in between components developed and maintained by different teams.
Well-Designed Development Environment
One of the biggest differentiating factors between DevOps and other development practices is the tools that are built for and integrated into DevOps. DevOps is designed to ensure that developers can produce code both rapidly and correctly.
A key component in this is technologies like continuous testing and integration solutions. These force developers to write tests in parallel with code and automatically apply these tests throughout the development process. As a result, the probability that a bug that impacts the functionality or security of the system slips by unnoticed is dramatically reduced. In order to be effective at DevOps, teams need to both deploy and use these technologies and take advantage of any opportunity to improve or optimize them, like leveraging the cloud for a quick, scalable test environment.
DevOps in the Real World
DevOps is a set of practices and tools designed to help teams be effective and efficient while developing software that is right “the first time.” It is suited to developers from any industry, especially defense and aerospace where code correctness is so vital, but is only effective if executed properly. Understanding what makes DevOps successful is an important first step in deploying DevOps for your organization’s development team.
If you want to learn how DevOps can benefit your safety-critical programs, or if your company is new to DevOps and want to know how to adopt this software development practice, contact Performance Software.