What are design pattern? Solution to common problems optimized reusable