Editor's Note: This article on DevOps is one of a set that can be found, along with videos and other resources, within the SDxCentral DevOps Topic. Check this Topic regularly to see the latest updates.
For DevOps to truly bridge the gap between development and operations, the right tools are important but just the tip of the iceberg. Agile software development, one of the most critical development methodologies in DevOps, calls for iterative and incremental development through cross-functional teams.
At the heart of an Agile approach, people, culture, processes, and tools are important for establishing stability, or what I refer to as “steadiness.” Generally, stability is an advantage, so there should always be good reasons for changing something that’s successfully in place. But developing software is also about change, and Agile addresses how to bring about change efficiently and successfully. I explain the relationships between Agile elements through what I call the “steadiness pyramid:”
The steadiness pyramid, with people, culture, processes and tools
Notice people are the foundation of the DevOps steadiness pyramid, followed by culture. Though it’s hard, culture must change if the organization is going to succeed with software development in the long run. Processes, then finally tools, top the steadiness pyramid, as you don’t want to use tools that will force you to practice specific processes.
An IT department may have enormous resources, but unless it gives people time and resources to develop the right capabilities, it will be unlikely to create real business value. To deliver high-quality software, management has to commit to building in learning time and providing support for people to study new practices and processes that will work better. They need to provide the right intrinsic motivators, such as autonomy and ability to innovate.
As you can see, successful DevOps does not solely focus on development and operations — it involves other disciplines such as human resources to create a supportive culture. The best technical design will fail if the people who need to use it or support it are not adequately prepared. Whether it’s training or drawing up job descriptions, each process should be examined to ensure the activities described are measurable so that they can be assessed for effectiveness and efficiency and be improved as required.
It can be hard to change to an Agile environment, so when selecting development tools, it’s imperative to focus on selecting those best aligned to your organization’s flexible processes, and not the other way around. Tools should have an open architecture, be simple to use, interchangeable, extensible, and interoperable. Chef, for example, can be considered a technological enabler — flexible enough to streamline your processes and smart enough to be applied by smart people, enabling both stability and flexibility.
DevOps and the 'One-Team Approach'The DevOps "one-team approach" refers to the practice of bringing different parties or units together to form a single team. This approach is critical to successful DevOps because instead of having disparate units with unaligned objectives, the single team shares and works toward the same business goals, such as successful software development, increased market share, or better customer satisfaction. Communication and collaboration become keys to achieving these goals.
Typical mismatches between development and operations occur around goals, processes, and tools. Some years ago, the Agile movement acknowledged the pains of suboptimal collaboration and divergent goals for business, programmers, and testers. Through the movement, the term “developer” took on a different meaning because both programmers and testers develop the software. Programmers and testers work together seamlessly and comprise the bulk of the working group known as developers.
“Developer” does not only refer to programmers and testers. With DevOps, from a development perspective, colleagues from operations are now added to the one-team approach as well. The approach means including experts from operations who develop scripts or infrastructure as code, or literally help to develop the solution.