Cloud Computing, whether it be a new marketing term, something we’ve always expected or purely viewed as a technical endeavor one thing remains true; do more, with less, faster than we did it yesterday whilst maintaining our reliability and availability. We have worked with large Enterprise systems that require complicated setup, complicated diagnostics as well as complicated upgrade paths. This inevitably results in slow, lethargic monolithic organisations that are used to waiting years for new ideas or new ways of doing something.
Cloud Computing has awakened not just a desire for a utility based billing model and to pay for what we use but has also highlighted other areas where we need to streamline our business and start delivering value not just features.
My experience of working with and leading large teams (up to 300 developers globally) has taught me that as we develop new systems someone else downstream has to deploy these new systems quickly and effectively for the overall process to be considered a success. ITIL has traditionally provided the framework for these types of engagements but we are seeing a distinct change as we move to Agile methodologies. Agility requires speed. Speed requires Automation. Automation requires a different mindset and playbook.
We no longer architect a solution for 3 years in advance – instead we create a roadmap and plan iteratively, producing the most amount of value for our customers at the most opportune time dictated to the business by the Product and Sales teams. These changes could be new features or bug fixes but they all have one thing in common; when we are ‘dev complete’ the new capability or fix is rolled out automatically through QA, Load Test and Pre-production environments and must pass all tests at each stage before being released into production. Releasing into production could be an automated deployment to a cloud platform, or could simply mark the feature as something that can now be sold.
This has been a major game changer to many industries where instead of an 18 month endeavor to catalog requirements, architect a solution and then deliver it to the customer we can now deliver the most important features and requirements within a months or even a week or less.
This massively accelerated speed of delivery has required a different tool chain. Multiple times per day we can now automatically take the development code branch from the version control system, deploy it and provide real time Test Driven feedback to developers. Every evening we can additionally take the development code branch and deploy it in a production like environment and run Integration and Load Tests as well as introduce Chaos Engineering practices to randomly shutdown components to test the recoverability and availability of the service.
This whole process is only possible with changes implemented across the organization. A DevOps team must all sit together. In the DevOps team there should not only be development and engineering, but also operations, systems support, IT, Product Assurance as well as Product Managers. No more silos and no more finger pointing. The whole team is responsible as one to build and provide value to the business and customers.
Building for success requires everyone working together. Every business’s customers’ expectations have grown and processes have to change to meet those ever-evolving needs. It’s exciting, it’s challenging, but there is nothing like pushing the boundaries by working in highly motivated teams who share a common vision and will to succeed with DevOps.