I have seen many Agile projects, particularly those focused on brand-new product lines, struggle with getting their infrastructure up and running. Much of the reason is the time and effort that is needed to get infrastructure established far exceeds the time it takes to start development using an Agile method, effectively the first iteration. Typically the approach used to establish infrastructure is ad hoc and often not always aligned with the needs of the project. Therefore, a task must be identified to establish infrastructure. The question then is, how to best approach the establishment of infrastructure for a project using Agile methods? We do not want to build excessive infrastructure that may constrain us in the future yet we want to establish enough to keep us stable and productive.
First, let's define what infrastructure means in the context of this article. Infrastructure refers to the technical structures such as environments, tools, and the processes that are used to support the product. Examples of infrastructure related components include the servers, network, development, requirements, configuration management (CM), build, defect tracking, and test tools used within the product development context. Infrastructure for a new product typically gets defined and established within an architecture and infrastructure phase of the first release when following a traditional methodology. The challenge is how do you establish infrastructure for a project following Agile methods when you must shift from a phased approach to an iterative approach and when the infrastructure personnel work in a hierarchical organization?
Considerations for Approaching Infrastructure
Let us start with some key considerations that will help frame an approach better suited to Agile methods:
- Applying Agile implies that we move away from big effort up front (BEUF) for establishing the infrastructure and instead evolve it over time and so that it is not an overwhelming effort for the first project and ensures the infrastructure is closer to our needs as the project team uncovers them over time.
- The establishment of the infrastructure is dependent on architecture. Architecture helps define the technology stack that is the building blocks for infrastructure.
- The infrastructure should be constructed to suit Agile. Moving away from phases and hierarchical processes and services where typically much ceremony and permissions are required and instead move toward a more continuous and heterarchy world (i.e., opposite of ‘hierarchy' where the world is flat and people are empowered at the lowest possible level) where knowledge and function and the constant building of such are the mode.
- The project team using Agile methods must continue their development work to deliver functionality and business value per Agile principles as the infrastructure gets incrementally built.
The challenge is then how to build an infrastructure that supports Agile while not obstructing the progress of the Agile team that must continue to deliver value? One suggestion is to utilize a newly termed approach entitled Infrastructure Envisioning .
With that in mind, consideration should be given to "Envision the Future" then "Adjust and Implement Incrementally". This essentially applies an incremental approach to the continuous establishment of an effective infrastructure.
Envision the Future
In order to get an idea of the context of infrastructure, it is important to envision the infrastructure needs of the new product understanding that things are subject to change. Within an Agile framework, this may be best served by implementing an iteration 0 approach that focuses on a high-level infrastructure model. The goal of infrastructure envisioning is to identify the initial scope of the infrastructure, access feasibility of technologies, and establish a reasonable go-forward direction. From here, it is important to understand that the while we have a reasonable go-forward direction, that we will continue to revisit the direction and adjust as appropriate.
Infrastructure dependency on Architecture
Within some Agile frameworks, there are models that describe an iteration 0 or inception phase where high-level envisioning of requirements, design, and architecture occur. These three engineering fields can help provide content to the infrastructure framework, but none more so than architecture. Architecture helps provide construction guidance for the infrastructure. This is particularly true since infrastructure has become more complex due to integrations amongst tools, connectivity across systems and domains, and standards being applied across environments.
Leveraging the Agile Model Driven Development (AMDD) framework helps drive the evolutionary establishment of architecture starting with envisioning the architecture. AMDD focuses on establishing models (e.g., architecture) before writing source code. However,