Flask on AWS Serverless: A learning journey - Part 2
About 3 years ago I learnt some basic Python, which I've used almost exclusively to
It's one thing reading about the extreme DevOps practices of the unicorns (Google, Facebook, etc), and it's completely another thing trying to adopt DevOps in a legacy organisation. Thats why it's reassuring to see some real world experiences of DevOps practitioners doing it in legacy organisations, with plenty of cultural inertia to make it challenging. My previous book - DevOps for the Modern Enterprise, recounted the experience of Mirco during his time at Accenture, working with client implementing DevOps practices. This book - The DevOps Adoption Playbook, by Sanjeev Sharma, is the learnings of his time at IBM implementing DevOps at clients.
He uses the analogy of sports, and the plays that teams practice and master for certain situations, and uses this to derive DevOps plays that you can implement in the situations that need it. These then make up a playbook - team practices that you can use for implementing DevOps.
He identifies 3 core themes of all plays:
No matter how you arrange the entire organisation, the various teams, or even how individuals behave and act, it is a combination of people (teams), processes and automation that enables the true potential of DevOps to be achieved. Well organised and highly collaborative that are following inefficient processes, and are overburdened by rigid governance, don't have the right tools to enable and scale automation, or have legacy environments to deliver the application to will fail. True transformation - and that is what a DevOps adoption is, a transformation - requires transformation of all three people, processes and tools. None comes first. They cannot be adopted serially, and none can be. ignored. Teams are the focal point of the transformation. Processes guide teams on how to do the work. Tools allow the the processes to be repeatable, scaleable and error-free.
He then identifies these main plays:
Certain specialised plays like DevOps for Mobile, Mainframe, IoT and Big Date are mentioned as well. In the next sections, we will review some of the other plays.
The book has multiples sections dedicated to Value Stream Mapping as a way to identify waste.
In Chapter 5 - DevOps for Innovation - Sanjeev talks about "optimising to innovate". When a legacy enterprise wants to innovate - either a completely new service, new business model, new platform, or even a new market - this now thing will be dependant on something from the legacy platforms. So this will hamper the speed at which the new innovation can be delivered, because the legacy systems will be slow to make changes to cater for the innovation. You thus need to optimise the legacy, by using DevOps, before you can expect to innovate.
In Chapter 5, he starts with a discussion on Cloud, and the different Cloud consumption models. Beyond just Public vs Private Cloud, he mentions other models like Dedicated, Local and self-managed vs vendor-managed Cloud models. This leads to a discussion around the importance of a DevOps Platform (PaaS), which allows you to adopt at a very low cost of entry, because you dont need to craft a delivery pipeline and toolchain. The main services that a DevOps platform provides are:
He ends off with a discussion on containers:
the unique application code inside the container is isolated from the environment outside the container. It is almost a DevOps nirvana. The developers do need to be concerned with the environment outside the container, and the Ops team do not need to worry about the code, config and dependencies inside the container
Of the core themes identified ealier, delivering small batches was about multiple teams using short sprints that deliver code in small batches. But if these need to be integrated and built into a single deployable asset, then we have defeated the purpose, and broken another core theme of reducing cycle times, because we know have to wait for external teams. The core issue behind this is usually a monolithic architecture, that forces big, co-ordinated deploys. However, a microservices architecture will allow you to deploy each module independently, preserving the core themes of small batches and reducing cycle times.
Cloud Native apps are the culmination of DevOps, Microservices and Containers. 12-Factor apps is a methodology on how to design and develop these microservices.
Cloud-native applications, by definition, require a DevOps Platform (PaaS or CaaS) in order to deploy and run. They are developed and delivered using a 12-Factor App methodology. Small batches, rapid delivery, scalability, and anti-fragility are some of their core themes.
This leads on to the importance of APIs and Plays for building an API economy.
Getting DevOps working in individual teams is one thing, doing across the organisation is completely different. In order to scale DevOps, he identifies various plays for scaling.
DevOps Center of Competency can be a source of DevOps expertise, enablement, tooling guidance, as well as DevOps coaches who can help teams adopt DevOps. DevOps coaches are modelled after the Agile coach - their job is to work themselves out of a job by leaving a team self-reliant that can deliver efficiently leveraging DevOps practices.
He references the classical Spotify model of Squads, Tribes, Chapters and Guilds as a way to scale DevOps, share skills and knowledge, while ensure teams are self-directing.
As a follow-on to the above team models, in order to have fungible people, visibility and traceability, you need to standardise on tools.
He suggests a balance between 2 extremes:
So the balance is a limited choice of tools that are well integrated, thus delivering consistency with choice. He gives an example of IBM Bluemix's open toolchain:
As an aside, if you just want a quick guide on how to do a DevOps transformation, then check out the free Supplemental chapter from the book Accelerate. In really is a simplified version of Sanjeev's book.