Half the time you won’t figure out how to effectively use a creatures’ tricks till you have played them at least once.

For example, by the third time my players ran into Grung in Tomb of Annihilation, I had the hang of their hit and run tactics (casters using spike growth/Plant Growth to slow party while they just jump over the terrain). They were about twice as dangerous, even though the party was two levels higher than the previous encounter.

Similarly, using teams of creatures with complementary abilities is lots of fun. Drow and Giant Spiders work, with the Drow casting Darkness that the Spiders ignore with their Blindsight, or Drow Mages and Quaggoth (cast Cloudkill, Quaggoth are immune to poison, grapple).

As a DM, you will always have a disadvantage-it is one brain versus many, and you will never be as familiar with your abilities as the players are. Your goal is to give the monsters a clear strategy that, in the absence of the PCs doing something to counter it, gives the monsters a realistic chance to win the fight.

Players’ favorite fights are the ones where at the end they can say “man, that could have gone bad really fast if Jane hadn’t (prepared clutch spell X/Action Surged and broke the wizards concentration/whatever)”.

The vast majority of the time my players find a way around my tactical twists pretty easily, even when I think “ooh, I’m finally going to get them with this one!” Often, it’s because they have a situational power that finally has utility, and they get to use it to break my encounter.

It’s ok for them to feel awesome. Don’t feel bad that you forgot about the Cape of the Montebank you gave them three months ago that let the fighter teleport past the wall you dropped between him and the squishies. The bad guy didn’t know about it either.

Ideally, after using a particular race/group for a while, you should get skilled enough with them that when your players encounter them they say stuff like:

“Great, &$@ing Grung. Um, someone want to see if any of them speak Common?”