I’d like to detail another key factor for successful software production in a distributed team environment: delivery pipeline.
Delivery pipeline refers to the process, infrastructure, roles, and tools an organization uses to deliver software from repository to production. Delivery pipeline varies between organizations and generally includes build, test, and deployment activities.
Delivering software to production is complex. For enterprise systems, complexity is a result of both the number and diversity of stakeholders, as well as extensive integration between systems characteristic of this domain. Highly distributed teams compound this complexity. Delivery efficiency is a critical aspect for the distributed organization to get right in order to leverage the strengths of distributed teams.
One subtle advantage of the pipeline concept, is that the term itself helps focus people on the end goal of the delivery process: getting functional value into the hands of users. Complexities of interaction and inter-dependency of teams within the distributed organization are secondary to this goal. To achieve this, each component of the delivery process must support this primary goal, through independence and highly parallel execution. In this way, the concept of delivery pipeline helps to align the organization. It’s a valuable point of consensus.
That consensus provides important guidance in key aspects of the delivery process. One important challenge for highly distributed teams is in merging code output between teams into a single version, in preparation for release. Because communication and logistics are more complex for distributed teams, merging can be extremely complex and is an enormous area of loss for distributed teams. The delivery pipeline viewpoint provides clear guidance: short-lived branching is essential. Quality here is a key factor for successful production with distributed teams.
By accurately defining change sets prior to execution, teams can closely control and even eliminate branching. Changes that are well defined and narrowly scoped are easier to merge. This is another important guideline of delivery pipeline: successful execution depends on the organization’s ability to divide large efforts into small, incremental, idiomatic slices. Work breakdown that intelligently reflects the delivery pipeline contributes to the efficiency of its execution. Delivery pipeline provides critical guidance to the distributed organization in this breakdown.
Automation is fundamental to the delivery pipeline concept. Automation is a big subject with importance beyond the delivery process. But it supports delivery in several key ways, and is essential to distributed production.
First, automation facilitates consensus and standardization, which are more complex for distributed teams and are crucial for execution. Automation makes consensus permanent and actionable.
Automation is a central platform for continuous improvement. As the organization identifies and implements automation improvements that strengthen the delivery pipeline, it accelerates team maturity. The process itself facilitates a culture of ownership and responsibility within the organization.
An important aspect of automation is test automation. A small, well-designed, efficient suite of acceptance tests provides fast validation at key points in the delivery process and are a critical asset for distributed production. The entire organization must have ownership and responsibility for creating and maintaining acceptance suites.
Most importantly, automation is an excellent source of metrics. Metrics are an important and commonly overlooked pillar of modern SDLC, including Agile. Delivery automation is a primary opportunity to collect KPI indicating organization performance and improvement. Measurement and analysis of outcomes are essential for successful delivery in a distributed environment.
Feature switching is another core characteristic of the pipeline concept. Feature switching enables newly delivered functionality to be activated or deactivated independently, decoupling delivery from functionality. This provides critical flexibility and it’s an essential tool for highly distributed teams to manage delivery risk.
Delivery pipeline is a central practice within continuous delivery. Focus here builds momentum in the ongoing journey towards increasingly refined and sophisticated SDLC. This is one more way the pipeline concept helps bridge the increased complexity of distributed teams with the powerful benefits of this advanced organization structure.