Implementing the concept of DevOps requires that a number of roles work together in a larger team all focused on three simple goals. These teams hereto now, even though focused on the greater good of the organization, are currently operated as silos. Operating in silos forces each team or department to maximize their team-specific goals. Generally, maximizing the efficiency of a specific step or process in the flow work required to deliver value to the business may not yield the most effective or efficient solution overall. DevOps takes a more holistic approach, using a systems thinking approach to view and approach the software value chain. Instead of seeing three or more silos of activity (Agile team, QA and TechOps), a more holistic approach sees the software process as single value chain. The value chain begins with an idea and ends when support is no longer needed. The software value stream can be considered a flow of products and services that are provisioned to deliver a service. The provisioning activity is a metaphor that can be used to highlight who is involved in delivering software in a DevOps environment.

Provisioning is a term often used in the delivery of telecommunications products and services (and other industries), and it is used to describe providing a service and everything needed to a user. Providing the service may include the equipment, network, software, training and the support necessary to begin and to continue using the service. The service is not complete and provisioned until the user can use the service in a manner that meets their needs. Viewing delivery as provisioning enforces a systems view of the processes and environments needed.

Developing, deploying and supporting any software-centric service requires a wide range of roles, products and services, that are often consoldiated into three categories; development teams, QA/testing, technical operations (TechOps).  Examples of  TechOps  roles can include configuration and environment management, security, network, release management and tool support just to name a few. TechOps are charged with providing the environment for services to be delivers and ensuring that those environments are safe, resilient and stable (I can think of any number of other additional attributes).

The roles of all development teams are fairly straightforward (that is not say they are not complex or difficult  Teams, whether Agile or  waterfall, build services in a development environment and then those services migrate through other environments until they are resident in some sort of production environment or environments. Development, QA and TechOps must understand and either create or emulate these environments to ensure that the business needs are met (and that the software runs). Additionally, the development, enhancement and maintenance process generally uses a wide range of tools to make writing, building, debugging, testing, promoting and installing code easier. These tools are part of the environment’s needs to develop and deliver software services.

QA or testing roles are designed to help to ensure that what is being built works, meets the definition of done and delivers the expected value. The process of testing often requires specialized environments to ensure integration and control.  In a similar manner, testing often requires tools for test automation, data preparation and even exploratory testing.

TechOps typically are involved in providing the environment or environments needed to deliver software constructing and allowing access to environments can often cause bottlenecks and constraints in the flow of value to the user. An organization embracing DevOps will actively pursue bottlenecks and constraints that slow the delivery of software. For example many organization leverage automation to provide the development teams with more control over nonproduction environments. Automation shortens the time waiting for another department to take an action and frees TechOps personnel to be actively involved in projects AND to manage overall the organizational technical environment.

DevOps helps to remove the roadblocks that slow the delivery of value by ensuing that Agile teams, QA and TechOps personnel work together so that environmental issues don’t get in the way. We can concieve of DevOps as the intersection of Agile Teams, QA and TechOps however what is more important is the interaction.  Interaction builds trust and empowerment so that the flow through the development, test and production environment is smooth.  The environments used to build software services are critical. Environments will need to be provisioned regardless of which Agile and lean techniques you are using. Even relatively common processes required specific software and storage to function. Consider the tools and coordination needed to use continuous builds and automated testing. If the flow of work needs to stop and wait until the environment is ready the delivery of value will be delayed.