customization without altering the original codebase • Design patterns are foundation of extensibility. Both symfony/event- dispatcher & symfony/dependency-injection components provides necessary infrastructure code for extension points in most cases • Extension points are easy to introduce, but they come with a cost of increased code & testing complexity as well as extra maintenance effort