- draw board
- move notation (coordinate or algebraic)
- all piece regular moves
- check
- castling
- validate illegal move: king must always in safe position
- en passant
- pawn promotion
- checkmate
- draw on stalemate position
- unit tests: test coverage min. 90%
- reduce code smells