Business Alignment: From your current applications landscape, choose a few applications that need rapid functional change and scalability – e.g. consumer-facing applications are good choices. These are initial candidates for going Cloud Native. If you are building a totally new application, build it as Cloud Native from the start.
Assess Business and IT readiness for adopting new structures/practices, and committing to the investments required. Based on organizational-unit readiness and capability fit, run a few pilots for going Cloud Native. Define success criteria for pilots based on business outcomes. Following on the pilots, quickly drive adoption and motivate teams to develop all business-critical systems-of-engagement as Cloud Native apps.
Architecture: Adopt “12-factor app” principles and Microservices Architecture. The 12 factors represent characteristics of Cloud Native apps. Microservices Architecture is an approach to decompose business functionality into independent, single-responsibility (micro) services. Together, they provide a powerful method to design Cloud Native apps. Adopt APIs to promote service provider/consumer mindset. This will drive wider adoption in time.
A Cloud Native app should be Cloud-agnostic. This puts a constraint on the use of any provider-specific code. Architect the services to use platforms that are widely available across platform providers in order to ensure portability.
Architect services for “observability” - the ability of a service to externalize its internal state. Choose what to observe based on KPIs to be met by the service. Observability is a key aspect of “designing for failure”, the idea that a system composed of many services can fail in unpredictable ways and therefore we need to address this at the design stage.
Adoption: Learn to use containers – even a monolithic application can be deployed to begin with. Build CI/CD tool chains and adopt Agile/DevOps practices to enable fast release cycles with better predictability of success. Use Domain Driven Design to ensure services are designed in conformance with Microservices Architecture. Embed security aspects into design and code (DevSecOps).
Aim to automate all testing. Induce all types of failures – node, network, service etc. – during testing (Chaos Testing) and ensure apps can recover from such failure. Use methods such as “canary testing” and “blue/green deployment” to reduce risk when releasing new features.
Take a tool-based approach to cover all aspects of observability – monitoring, logging & aggregation, tracing, alerts & visualization. Drive standardization, follow “observability as code” practices, and create feedback loop from observations to the application team.
Build automated dashboards for sharing information within and across teams.
Foundation: A container is a way to package code, configurations and dependencies into a single, independent unit that can be deployed. Microservices are particularly suitable for container-style deployment. Choose an appropriate container framework as the core of your platform strategy.
Select other PaaS components for event-streaming, caching, persistence, integration etc. as appropriate. Choose from open source or managed-services versions per organizational comfort – open source requires more effort to manage, while managed-services platforms are easier to use but decreases portability. Either way, think about building platform management capability from the start.
Set-Up: Set up the chosen platforms in the Cloud. Integrate platform usage into application code through “infrastructure as code” tools & scripts, allowing the services to manage their own resources. Build a dedicated platform team to manage PaaS components as Cloud Native adoption matures. Task the platform team with building the layers of abstraction necessary for maintaining application portability. The team can be centralized or federated depending on the organization’s culture.
On-Boarding: Pilot a few apps for initial deployment on PaaS. There is a learning curve for gaining the expertise and comfort required to manage PaaS components. Focus on encoding the learning into automation scripts, tools, templates, and dashboards. Automation will greatly simplify app on-boarding for application teams, allowing them to focus on business logic and not worry about platform integration. Adopt automation as a way-of-life – it will help avoid common mistakes, allow for best practices to spread quickly, and create a “feed-forward” mindset.
Team & Culture: It is said the apps you build mirror the organization you have. Drive change in mindset and practices in line with Agile/DevOps. Create upskilling plans that include training, coaching and mentoring. Provide easy access to training material, tools and other resources. Find ways to measure and track learning outcomes – e.g. certifications. Create incentives for people to learn new skills and embrace new behaviors.
Maturity: Use change management to help people accept the coming changes and remove bottlenecks. Define and measure KPIs for Cloud Native adoption at an organizational level and drive improvement – example KPIs are commit-to-deploy time, deployment frequency, request throughput, error rate, traffic, latency, saturation etc. Embed and encourage continual feedback and feed-forward behavior into each value chain of Cloud Native adoption – planning, delivery and operations. Use tools as a key enabler – e.g. to create dashboards.
Governance: Conduct strategic assessments when appropriate to realign with current priorities and adjust goals, KPIs, resources where appropriate. Define policies and procedures for on-boarding new apps, selection of platforms, taking build vs. buy decisions, scoping or de-scoping of projects etc. Also, allow for addressing of urgent/exceptional situations.
Create governance processes in line with respective areas of concern/competence for stakeholders – e.g. business stakeholders should decide on scoping or de-scoping of projects whereas IT architects should decide which platforms to use. Conduct regular reviews of projects to ensure conformance to Cloud Native Architecture.
 - https://hostingtribunal.com/blog/cloud-adoption-statistics/
 - https://containerjournal.com/topics/container-ecosystems/survey-finds-container-adoption-more-pervasive/