One thing I found slightly confusing was the naming for ShowMainMenu vs StartGame. It seems like StartGame and ShowMainMenu are doing the same kind of thing; showing a menu of options for the player to select from. For my own code I renamed the StartGame method to ShowGameScreen which helped me group together the actions in my head.
Just thought I’d share since it might help you as well.