Demonstrates concepts of tight vs. loose coupling, single responsibility, dependency injection, and writing automated tests