The game should never give a hint that's irrelevant to what the player needs to do right now. If the player sees a popup explaining how to crouch and crawl under obstacles, they will assume that this information is applicable in their immediate vicinity and begin looking for things to climb under. This means that level designers need to mark specific zones: The player needs to jump here. They crouch here. They get new weapons here. And so on.
We should not store the tutorial counters in the save file. We should allow for the fact that sometimes someone (the player's little brother, for example) might jump into the game in the middle. Or perhaps the player hasn't played a game in months and has forgotten everything. If I spawn at checkpoint #50 and I haven't played the game in ages, the game might need to remind me of things. If I just died and I'm respawning at checkpoint #50 then the game shouldn't reset all the tutorial info. So tutorial hints apply only to a game session, not to the overall game progress.
Tutorial hints shouldn't be given under duress. The player might get killed trying to read help text in the middle of a fight. They player is also more likely to overlook or forget hints given when they're busy with complex or stressful tasks. If they're platforming, or avoiding traps, or shootin' dudes, then it's a bad time for help. The exception to this would be if the help is needed right now. For example: How to reload when the gun is empty, how to switch weapons if they're out of bullets entirely, and how to sprint if they're in a forced-retreat kinda fight. Detecting these special situations might be a bit fiddly, but if you neglect this then you'll have a hint system that will stop helping you when you need it most.
Different mechanics should have different thresholds for determining if a player needs a reminder. If I'm not progressing because I've forgotten I can use the kick button to bash down doors, then it's probably best to remind me sooner rather than later. So if the player hasn't kicked anything yet this session, then maybe it's best to offer the "kicking" suggestion when the player reaches a kick-able door. On the other hand, if the player is running around using only the assault rifle, maybe they know how to switch weapons but they're choosing not to because they're having a good time with this one. In this case, pestering them with switch weapon reminders would be really obnoxious. So there should be a long timer on some reminders and a short timer on others.
Show tutorial messages only when needed. If the player hasn't demonstrated knowledge of a system yet this session, and if they are in an area where it applies, and if they aren't in the middle of a fight, and if enough time has passed for this particular message, then we can finally conclude its safe to give them a hint.
This might sound like a lot of trouble, but given the millions of dollars we spend on making elaborate cutscenes and spectacle driven set-piece events, it seems like there ought to be room in the development budget for a couple of days to iron out these hints and smooth out the gameplay experience for the player.
Okay, truth time: In Arkham Asylum I spent half the game not throwing batarangs. I played all the way through Max Payne without realizing I could activate bullet time without needing to leap first.
What about you? Did you ever struggle in a game because you forgot the controls?
Shamus Young writes books, but he never reads the manual.