Following proper design patterns and demonstrating use of protocols