Introduction to the course
Working methodology and project organization
Setting up student groups, course facilities, and shared resources
Software architectures based on micro-services
Development of cloud-native applications: design, implementation and management of modern applications in cloud-based environments
Stateful applications
Introduction to the language
Handling large software projects with Git: primitives and best practices
Programming best practice: linting, etc.
GitHub actions: principles and examples
Kubernetes brief
Distributing applications: Helm and Templating
Introduction to Kubernetes programming: Operators, WebHooks, Manager, Reconcilers, Finalizers
Kubernetes ecosystem (kubevirt, kyberno, clusterapi, gatewayapi, certmanager)
Serverless
GitOps
Short introduction to other tools for cluster provisioning and configuration: Terraform, Ansible, etc.
Business characteristics of IaaS, PaaS, and SaaS
Strategies for cloud adoption
Cost-benefits analysis, CapEx vs. OpEx.
Lock-in vs. Time-to-Market
Introduction to the Agile principles
Customer centricity and user value
Iterative and incremental Development; Minimum Viable Products (MVPs)
Scrum, Kanban
Continuous Improvement
Note: labs should be integrated as "live demos" in the lecture, or given as assignments.
Creation of the roadmap for a web application (G. Zangari)
Development of a web-app with a cloud-native approach (M. Mangiulli)
Terraform + Ansible
Kubernetes Operator
Kubernetes WebHook
Creation of an IoT app with a serverless backend
Git best practices
GitHub Actions
TODO