Object oriented design patterns help you create more robust and flexible software. In this course I will show you how to use these patterns in TypeScript. Design patterns are best practices that will help you solve common problems in programming. There is no need to solve a generic problem that has been solved many times before. Simple example: how do you write a system that allows user to order a product and customize some of its features? There are many possible solutions but they probably won't be as flexible as using a decorator pattern.