For more than 30 years, I’ve been involved in multiple large, enterprisewide, mission critical application development projects. Along the way, I’ve also developed and brought to market several products. In looking back at these projects, the common thread in the successful ones was the ability to respond quickly and effectively to the changing needs of the end user. Whether these changed were the result of vague or misunderstood requirements, a changing technology landscape or competitive pressures, the ability to react quickly without regressing was critical to success.
Getting theses projects and organizations in an agile posture came with a litany of trials and tribulations. Without a doubt, organizations embarking on their journey to DevOps will encounter many of these same challenges. Yet, the benefits are substantial and worth the effort.
With this series, I wish to share these past experiences and observations—both the successes and the failures—so others may avoid or minimize the pitfalls I encountered. My hope is to smooth out the road to a successful adoption of DevOps.
Leveraging the Cloud
Organizations are moving to cloud computing and away from dedicated data centers at an increasing pace. This industry wide migration, the federally mandated “cloud first” initiative along with the growing maturity of cloud platforms and their supporting infrastructure make the cloud a compelling platform choice for an organization to host their applications.
And when you look at what the cloud, or more precisely what an infrastructure-as-a-service platform has to offer in the way of building a CI/CD pipeline and empowering individuals and teams to deliver to the end user, the use of the cloud or an IaaS platform is even more compelling.
So how exactly would one benefit by moving to a cloud provider such as Amazon’s Amazon Web Services, Microsoft’s Azure or Google Cloud when it comes to building their CI/CD capabilities? Let’s take a closer look at some of the organization level capabilities these platforms offer and how we can expect to benefit from them in terms of DevOps:
- Operating vs. Capital Expense: Instead of investing upfront in additional hardware and resources for undetermined use, you can now pay for these as they are actually used—and pay only for what you use. In terms of DevOps and your CI/CD pipeline, your development and testing teams may begin prototyping and building out environments immediately—at minimal costs and without waiting on operations and finance. The IaaS platform provides all the compute resources, networking, security and infrastructure required to hit the ground running.
- Scalability: Large or small, your organization and applications can achieve global scalability in a matter of minutes rather than weeks or months. This scalability can also be applied to the CI/CD pipeline. As development teams grow and their needs increase, you’re able to easily expand to meet those needs. Testing especially benefits from the scalability of these platforms. End-to-end and volume testing traditionally require significant compromises in terms of emulating the target production environment. The cost of mirroring the production environment was usually too costly, time prohibitive and difficult to financially justify. With an IaaS, volume and end-to-end testing environments can be provisioned, utilized and then decommissioned when they are no longer needed. This not only results in a significant cost savings but also allows test environments to be easily modified to meet the changing testing needs of the application.
- Capacity Planning: In the past, because of the lack of speed and flexibility in provisioning new resources, organizations were forced to overprovision to meet spikes and surges in demand. You had to choose between sitting on expensive, idle resources and dealing with limited capacity. IaaS relieves that pressure by allowing your teams to provision resources only as they are required. Development teams can scale up their infrastructure and scale it back as their needs dictate.
- Speed and Agility: Resources can be provisioned in minutes rather than days or weeks. This dramatic increase in speed and agility affords your developers, testers and end users the ability to test and experiment with unprecedented ease and cost effectiveness. Infrastructure changes can be easily provisioned, prototyped and, if adopted, codified in your infrastructure-as-code base, which resides along side your application code. Changes to the application and its supporting infrastructure can then be progressed in lock step along the migration path to production.
Of course, you don’t require the cloud or an IaaS platform to build a DevOps culture in your company, or implement a CI/CD pipeline for that matter. I’ve built CI/CD pipelines on bare metal, old-fashioned servers and network infrastructure and delivered software and application to production on them for longer than I want to admit. But the capabilities offered by IaaS platforms to quickly scale up, the flexibility in capacity planning and the speed and agility they offer make them a far superior platform for building your CI/CD pipelines.
And when organizations combine these IaaS platforms with IAC and the right mix of configuration management and provisioning tools, they are not only able to quickly and confidently roll out application features but also the necessary infrastructure changes in a repeatable, predictable fashion.
We’ll be discussing IAC, its role in your CI/CD pipeline and how to determine the right mix of configuration management and provisioning tools more in upcoming segments. Stay tuned.
Read the first column of William Drew's agile musings here.