It turns out that modeling the rules of Chess and Checkers in code is a pretty good way to teach and learn some programming concepts.
Inspired by Chapter 2.4 "Abstracting a Domain" of "Software Design for Flexibility" by Chris Hanson and Gerald Jay Sussman, I've spent more hours than I want to admit in writing a code walkthrough of one possible solution.
I might soon start looking for another similarly didactic modeling problem to work on.