 Hi, everyone, welcome to this session. Today, we will talk about Cloud Native and why it is important. We will also touch upon different teams in organizations with Cloud Native applications. And then I'll also discuss how you can influence in the Cloud Native space as a product manager. But before we dive in a little bit about myself, my name is Suleena Singh. I am from India. I have about 14 years of experience in the tech industry in companies like Microsoft, Cisco, Marvel. Right now, I'm part of the Azure Observability team. But prior to that, I was also part of other teams, like Azure Data Platforms and Cybersecurity, very different areas, but very exciting, each of them. You can find me on LinkedIn. I've put my LinkedIn URL over there. So in case there are any questions or you want to reach out after the session, please do connect on LinkedIn. So let's start. What is Cloud Native? And I'll pause here for a few seconds for you all to read this cute little story. So Cloud Native is much more than just being on the cloud, right? Cloud Native systems take the full advantage of the cloud service model. For example, it takes advantage of containers, microservices, and other cloud technologies to deliver high availability, reliable, and scalable solutions at speed. Now, let me tell you why this is important, right? Let's look at users today. Users of tech products like you and me, what do we need? We need innovative features that adds value or solves our problems. For example, let's say I'm a customer of a bank and I want to access banking solutions anytime, anywhere through the bank's software applications. Now, as a user, I want the banking software to meet all my banking needs. I want those needs to be served fast and if there's an issue, I want to resolve that fast, right? I also want the banking application to be available anytime that I need, right? If there's a downtime, then most likely as a customer, I'll be frustrated and consider other bank. So this is where users are today. And let's see what companies are doing about it and what do they care about? So as an enterprise, companies care about creating products that customers love. They want to respond to customer issues and also industry trends fast so that they can reach market fast. They want zero downtime because of course, they want their apps applications to be available for their users anytime that the users need. They want to scale and maintain the scale as and when the demand grows. And security is again another top of mind concern for enterprises, enterprise data as well as customers data. And of course, they want to control costs. Now, as we go along, I'll talk about how a cloud native can help enterprises achieve all of this, all of the good things that you see on screen. Speed, scale, zero downtime, security, resiliency, agility just by applying cloud native principles and processes. So cloud native is an evolving space and cloud native computing foundation or CNCF is one of the thought leaders who provide guidance on technologies and tools that organizations can use to build cloud native applications. And how CNCF has defined cloud native is cloud native technologies empower organizations to build and run scalable applications in modern dynamic environments such as public, private and hybrid clouds. These techniques enable loosely coupled systems that are resilient, manageable and observable. Combined with robust automation, they allow engineers to make high impact frequent changes or changes frequently and predictably with minimum toil. So this is what how CNCF has defined cloud native. And there are many companies who have adopted cloud native and they are creating great products. I've listed some of them, Netflix, Uber, Pinterest. We all love these products. And as you can see, these companies have thousands of microservices running behind the scenes and changes are deployed about hundreds of times a day to ensure they deliver a great customer experience and we all love these apps. Now let's look at some of the key pillars of cloud native, right? And here in this screen, you see some of the key pillars that I have mentioned and I'll touch upon each of them briefly. DevOps and CI CD, which is continuous integration, continuous delivery. So the patterns and practices that enable faster, more reliable releases to deliver value to the business are collectively known as DevOps. What this means is it means being able to release software rapidly and it gives fast moving companies a huge market advantage when it comes to deploying products. DevOps include things like source control, task management, the CI CD pipelines with testing, which automates the deployment of their changes in a safe and staged manner in all their environments. Microservices, microservices is an architecture where a software is composed of small, loosely coupled systems that communicate with each other, maybe through well-defined APIs. Each of these systems are independent and run by small self-contained teams. Now microservices architectures make applications faster to develop and deploy and easier to scale just because they are loosely coupled, independent small systems. Now containers, containers are the core of cloud native. Whenever somebody talks about cloud native, most likely containers will be a part of their conversation. Now the CNCF places microservices containerization as the first step in their guidance for enterprises beginning their cloud native journey. Containers are just packages that enable applications to run in any environment. That is containers virtualize all the necessary tools and runtime files so that your application can run anywhere. Now, while containers help you run your application or orchestration is what lets you manage them, especially important when you're running these containers at scale. Backing services, cloud native systems are powered by many other resources such as data stores, messaging, messaging queues, authentication, caching, et cetera. These services are known as backing services. So observability is the ability to observe or monitor an application and respond to failures or proactively prevent failures or downtime by monitoring metrics and signals from the application. Very important when we talk about cloud native. Now, let's also talk about some of the patterns. So when we think of cloud native applications, there are several stages like, for example, the architecture of the application, delivery, deployment, and then infrastructure management. So I've already discussed some of the areas here, but when we think of software architecture, it is very important for enterprises to design their apps, keeping in mind the modern design practices. So one of the popular, very widely accepted methodology is the 12 factor app defined by Heroku. I'll talk about this in the next slide, so I'll not go deep, but I'll come back to 12 factor apps in the next slide. Also working at large scale, enterprises should also embrace modern data management practices to manage huge workloads and data to scale their applications. Backing services, I've already discussed about these. When it comes to delivery, CI CD, and test-driven deployment and development is key. Also having a separate build and release processes, but still keeping those different environments very similar to each other, which is the parity between environments, and being able to safely deploy changes in all of these environments in a stage manner is key to delivery or deployment of changes. Now coming to infrastructure, I think the first thing is immutable infrastructure, and what this means is servers are not something that can be touched or changed, like if a server fails, then or something gets wrong, then you just completely remove that and spin up another one, and all of this should be done automatically in runtime. So that is what we mean by immutable infrastructure, autoscale, your servers should be configured to scale up or down automatically based on the load. Observability, being able to monitor the health of your services and observability is not just being able to monitor your infra, but also applications with deep telemetry and be able to diagnose an issue is very important. It's also important to design for resilience because infrastructure or your servers will fail at some point, but how do you ensure that that does not impact your service or stop your applications? API based communication, a big part is thinking about APIs to interact with infrastructure, like how do you scale your servers? How do you remove a server? How do you configure the server? For example, add additional storage or, so all of this should be based on API based communication and that is the key when we talk about cloud native. Last in the infrastructure piece is the chaos engineering. So by synthesizing failures or other scenarios, real time scenarios and seeing how the system reacts and responds and they should be done in production so that it's as real as your actual customer environment. So that you see how the system is resilient and reacts to failures. The last point, the one at the bottom is about teams and a cloud native is more about enterprise culture that needs to be imbibed by all the teams. Teams need to be empowered, a very, very customer centric and learning needs to be a core of it all and that is when enterprises can truly be cloud native. I've talked about the 12 factor apps. Let's go a little bit deeper. Of course, each of these is very detailed. It'll take us many hours to talk about each of the whole entirety of 12 factor apps. So I'll briefly touch upon these 12 factors. So 12 factor app is a widely accepted methodology. It was defined by developers at Heroku but was first presented by Adam Wiggins. You can find more details in 12factor.net and I've listed a quick overview of the 12 factors here. So I'll go through each of them one by one very quickly. A single code base for each microservice which is stored in its own repository and deployed to multiple environments like QA, your staging, beta production, et cetera. Each microservice isolates and packages its own dependencies and the dependencies are declared upfront. Our configuration information is externalized through a configuration management tool so that your code does not have any config related information. Our backing services, your data stores, message brokers, et cetera should be decoupled and addressable via let's say a URL. Each release must enforce a strict separation across build, release and run stages. Each microservice should execute in its own process isolated from the running services and they should be stateless. Each microservice should be self-contained with its infrastructure and functionality exposed on its own port doing so provides isolation from other microservices. When capacity needs to increase, say scale out horizontally, which means concurrency is critical. Service instances should be disposable. Keep parity between your environments, for example, your test and production should be the same. Run administrative and treat logs like your event streams, run administrative and management tasks such as data cleanup or computing analytics as a one-off process. Now, as a PM, that was a lot about cloud native and hopefully you were able to track some of the patterns and pillars of how enterprises can be cloud native. But let's say you're a product manager in an enterprise which creates cloud native applications. How can you influence as a PM? And I've put down some of the points that I feel are still relevant and you can create a lot of impact as a PM. The first one is being the voice of the customer. So as a PM, you are the customer voice, you represent the customer. So being customer centric is very, very important. And as I discussed about cloud native, the spectrum is very broad in the sense that you could be a PM in one of the backend services. For example, API layer or the messaging infrastructure or the data pipeline, but ultimately everything that we do impacts the end user customer experience. So very important to keep that in mind like how or whatever you're working on is how is that going to impact the end customer experience and not just end customer, customers, customer experience, right? A cloud native applications also shorten the feedback loop because you deploy fast, you get to market fast, but that also means how do you leverage that shorter feedback loop and get quick customer feedback and apply that into your product management journey. Next is product strategy. As a PM, being able to identify opportunities for growth is something that is going to help you with something that you can focus on, defining goals and metrics. So as a PM, you define the goals and metrics, the business metrics, and you're responsible for not only successfully delivering the features, but also to measure the impact on the goals by tracking key metrics. So that is also something that's very key. Managing stakeholders, this I feel is very crucial because in enterprises with cloud native apps, there can be so many teams that you will partner with both internally and externally, right? So you'll play a pivotal role in communicating shared goals or maybe align on dependencies with internal teams, internal partners, maybe the teams which are part of other components in the whole cloud native ecosystem. So even externally, you have to work with your customers, partners, or for example, you're building a community for your customers. So as a PM, I think you can do much, much more when it comes to managing different stakeholders. And finally, a good prioritization, way to prioritize what features you're going to focus on, your team is going to focus on making the right trade-offs will ensure success not only for you, but also for the entire product and team. So as a PM, I think you can create huge, huge impact on enterprises who are building cloud native applications. So that was all I had for today. Let me know if there are any questions and thank you for listening.