Josh Larsen is the Director of Product Development at Green House Data. Connect with him on LinkedIn.
DevOps — the marriage of the development and operations departments within a software organization — and Agile methodology have been mentioned alongside cloud computing for years now, and with good reason. Using Agile in the cloud is a classic pairing that goes together like peanut butter and jelly or macaroni and cheese…okay, let me go grab a snack before this simile gets me drooling.
But seriously, even if Agile and cloud technology aren’t as tasty as PB&J, they can still have you smacking your lips in satisfaction as you react to business problems with technology solutions in a much faster and more reliable manner.
Here’s why Agile software development practices work so well when you’re working with cloud infrastructure, even if you aren’t a software development company.
DevOps stems from one problem with Agile. If one team is constantly producing updates, the department who heads up the next step in the process must be ready to move those updates along. Cloud computing and Agile blur the lines between departments, as everyone must be ready to work together within the same spheres to accomplish continual improvements.
This applies to more than the development – test – production – support cycles in software. Your underlying infrastructure also goes through a deployment – test environment – scale – production – support cycle of its own. That means, for example, that a customer support inquiry might come down the pipeline and make its way straight from support to engineering, who can then implement a fix in their next sprint. Support is also kept apprised of recent changes and updates. Operations is ready to scale infrastructure to match the latest changes.
Altogether, your cloud-enabled organization handles change management and ongoing operations in a much more effective manner. Your teams have more autonomy even as they work together; you gain efficiencies across the organization.
One of the clearest benefits of cloud computing is its “agility” — it takes much less time to spin up cloud IaaS or PaaS components compared to ordering, receiving, installing, configuring, testing, and rolling out a physical server with software. Indeed, if you are running highly stable workloads, you may want to move them out of the public cloud. But if you are presented with a business problem and want to deploy a technology solution, rolling it out in the cloud is fast and easy.
With cloud-native tools, you’re also better able to bake-in governance and security to control any gaps in your InfoSec posture while also limiting cloud sprawl and shadow IT. By using cloud automation features and implementing governance policies, you can limit how wild your dev teams get with cloud provisioning, while still enabling them to experiment with various forks. Meanwhile the operations team is involved — either in a hands-on capacity or through automation policies — with every cloud resource that is spun up, whether in production or still in development.
Agile development often includes the idea of releasing a “minimum viable product” as soon as possible. There may be some issues to work out, but those are then solved in short “sprints” of development. Constant updates from these sprints round out the product into a complete solution.
Treating your cloud infrastructure in a similar manner allows you to plug in the latest features. For example, Azure Sentinel was recently released. Let’s say your team decides to move SIEM operations wholesale to the Azure Security Center.
In a traditional “waterfall” methodology, a major new piece of software might take months or even a year to roll out organization-wide. With Agile, while the dev team is coding, the ops team can integrate automated Sentinel security features simultaneously, rather than waiting for a separate deployment stage. A traditional waterfall method would require considerable re-working of the code if this security design was introduced only at deployment.
Infrastructure as Code (IaC) is a way to administer cloud resources in which you provision the actual infrastructure by using code snippets. This is key for cloud automation efforts. JSON, Python, Ruby, and similar languages are used along with Code Management practices to automatically manage cloud IaaS and PaaS components within the overall cloud infrastructure.
Now Agile really comes into focus. The code management practices required for IaC mean you must follow Continuous Integration and Deployment (CI/CD) and test and integration practices that are very much in line with DevOps software development processes.
All of these tasty flavors of infrastructure could be yours — with DevOps you can push out new features and entire apps without major interruptions to service delivery.
To drive things home, if your cloud infrastructure is a PB&J, using Agile to build it would be like buying some bread off the shelf at the grocery store. That bread is a PaaS component that is more or less plug and play in your cloud. Your team begins working on the peanut butter portion, but they start with just put some nuts on the bread along with some fruit. It isn’t the tastiest sandwich or the easiest to eat, but it gets handed out to your entire organization. The support team is warned, “Hey, this sandwich is gonna be really crunchy and stuff might fall out, but it works.”
While support and Q&A is receiving feedback about the sandwich, which does functionally relieve hunger, the development teams are already churning real peanut butter from raw peanuts. Aha, a new feature! The jelly is taking much longer to cook down, so they go ahead and pass on the peanut butter to production. The production team starts using PB instead of just plain nuts. Already the feedback coming from users is that the sandwich is much improved.
A feature request may be banana slices instead of jelly — that can be implemented alongside without disturbing the production of the classic PB&Js, and with rapid response. The bottom line is that the users are getting tastier sandwiches at a faster clip than if you had waited to produce everything, then shipped it out in a finished state.
BUT WAIT! One of the executives is celiac. Good thing one of your engineers has a picky aunt who only eats gluten free and has been testing a house-baked gluten free bread already. While it is still kind of chewy and lumpy, you’re able to push out a 1.0 version of your gluten free PB&J quickly. Your engineer continues to improve his recipe until you have a separate deployment that is 100% gluten free and pretty tasty.
In summary, using Agile in your cloud projects helps your deliver a solution faster while also facilitating more effective management of that solution. You create more value by constantly improving that underlying infrastructure rather than letting it sit for three years until it deprecates. And by iterating, you often deliver critical features faster than if you were to wait for the entire infrastructure to be “fully baked,” so to speak, at which point business goals may have shifted or key technologies may have fallen out of favor.