Flexible Code Design Protocols: Define a blueprint of methods or properties (Interfaces). Extensions: Add functionality to existing types (like adding a method to String).