Problem Solving With Patterns