design and patterns