When I originally estimated the introduction of an unbeatable computer player I thought it wouldn’t take more than two days.
I didn’t put into consideration how many changes would be required to make implementing a minimax. It occurred to me while test driving the score method in the minimax class that the Board class had no current or other player method. The responsibility was rightly in the Game class.
At first I thought that I had made a mistake, but all this highlighted that the API needed to change which in this case was okay. It revealed a new use case that a future client of the API might perhaps need.
This took me down a deep rabbit whole, I began implementing all sorts of different methods, methods that I had forgot to add previously like IsGameDrawn().
I truly wonder if I had taken a different path earlier, would’ve got myself into this little predicament.