Why Infrastructure Matters To DevOps

Discussions about DevOps can be rather abstract. Yes, DevOps is a culture change and it's focused around collaboration, but I really like the way Gene Kim describes DevOps in terms of its goal: high-performance software outcomes.

One of the more helpful ways to think about DevOps is how it affects the flow of productivity from the developer to production deployment. To use the lean manufacturing analogy, software developers are working at the "raw materials" end of the factory floor, and the production deployment represents the "finished goods."

Getting from the start to the finish of that process requires attention to the flow of work, because there are other workstations in between those beginning and end points: QA/testing, information security, and compliance teams, for example, must do their part to ensure that deployed software meets the quality, security and compliance requirements in the real-world environment.

This is where infrastructure comes to play its part. Think of infrastructure environments as the workbenches on which these teams have to do their job. Infrastructure can either be an enabler of velocity, efficiency, and productivity or it can be a real obstacle.

According to a study by Enterprise Management Associates, it takes 47% of enterprise IT teams anywhere from one week to more than a month to provide infrastructure environments to developers and testers. That lag time is definitely an inhibitor to the flow of work towards production deployment.

Furthermore, in many cases, software development teams often can't access anything close to a production-like environment, which has a big impact on quality and raises the risks of huge failures when deployment happens.

This is why the notion of Infrastructure-as-a-service (IaaS) clouds is relevant to DevOps. IaaS clouds facilitate the effective movement of software toward value-added, quality outcomes at speed. Let's unpack that statement:

Speed: Very simply, IaaS implies that infrastructure is accessed via self-service and capable of auto-provisioning, which makes every team more effective and productive.

Quality: IaaS allows teams to do their work on more real-world infrastructure environments earlier, which means that code is much more likely to work when it gets deployed into production. For example, a developer than can easily move from initial coding on her laptop to functional testing on a production-like topology of VMs plus possibly other relevant infrastructure (like dedicated servers and networking).

That's much more likely to catch issues earlier in the process than otherwise, which means that those undiscovered issues aren't passed on as "technical debt" (as Ward Cunningham put it) to downstream teams. If downstream QA and other teams can be more effective and productive in their qualifying and certifying because of the rapid availability of real-world environments, the code will arrive at the production deploy with far fewer hidden quality issues.

Collaboration: If developers, QA, security and compliance teams can all access similarly real-world type environments, then the infrastructure commonality, ease of access, plus real-world relevance increase their ability to communicate and collaborate about requirements and issues.

Value: The sooner code can get to a high quality outcome in production, the sooner it provides value to the organization by enhancing business processes. In addition, the sooner code is used by end users, the quicker new or clarified requirements feedback can revert to developers, creating a virtuous, value-enhancing cycle.

So infrastructure matters to DevOps and the form it needs to take is an IaaS cloud. IaaS clouds are a key IT contribution to a DevOps collaboration culture that delivers better and faster software outcomes.