This document describes a learning package on designing and migrating service-based applications. It discusses techniques for designing applications to enable self-adaptation. It presents three motivating scenarios involving supply chains, wine production, and mobile users that require different types of adaptation. The key aspects of adaptable service-based applications are life cycles, adaptation strategies, triggers, and the association between strategies and triggers. Guidelines are provided for modeling triggers, realizing strategies, and relating them through various design approaches like built-in, abstraction-based, and dynamic adaptation.