Practical Code Refactoring, Part 3 - Extensibility