How to Use Design Patterns (a conversation with Erich Gamma)