patterns based on Head First