requirements: 1. two players play against each other 2. prevent illegal moves and correctly declare check and check-mate 3. save board at any time (serialization) 4. Use Rspec tests 5. keep classes modular and clean, methods doing only one thing each