Working through Object Oriented Design in Ruby by Sandi Metz