Combat in a video game is good when you have a variety of options (discrete verbs that have unique animations, state, or use of unique entities) or sub-options (things like position, timing, rotation etc that modify the function of a verb) which have varied outcomes, and determining which option/suboption to use for a more/less optimal outcome in a given situation is unclear, but can be logically deduced.
If elements of your combat system are random (have output randomness, as opposed to input randomness), such as randomizing which attack you’ll perform when you press a button, then the best option for a scenario cannot be logically deduced. The same is true if the way that attacks function is unclear or inconsistent (like funky hitboxes producing drastically different outcomes with similar inputs, or the visuals not clearly communicating how the move works). Ideally the player should be able to visualize in their mind the outcome of different inputs, working it out like a math problem (“oh, I could have done that instead”). This makes a game fair and understandable.
If specific enemies, or specific enemy attacks require you to use specific options with a uniform outcome, then the optimal choice is clear, not unclear. There might be 100 different options, but if there is a definitive right and wrong choice without ambiguity, then there are no interesting decisions in the game. Playing the game well becomes a simple binary.
If options and sub-options don’t have varied outcomes based on circumstance, then the situation stays the same, and if you find something that works, you can use it repeatedly until you win. The situation needs to evolve over time so the game continues to retest you, by offering you new interesting decisions instead of the same ones.
If your options and sub-options aren’t balanced, ie. one is way better than the others then, again, it becomes very obvious how to win, which is a problem. The goal is to encourage interesting choices, where people choose differently depending on the situation, and differently as their understanding of the game improves.
If your options/sub-options are redundant with one another, all do the same thing, then there isn’t a pressing reason to pick one over the other depending on circumstance. This again means there aren’t any interesting choices, just arbitrary ones. If the options are redundant, then implicitly they’re probably failing some of the other criteria too.
If the enemies and obstacles in the game don’t present unique situations regularly (because enemies and obstacles are unique, or are mixed in unique compositions) then, again, there’s no work to be done in determining the best course of action.
And all of this can be applied to practically any game with combat, from Doom, to DMC, to God of War, Legend of Zelda, any fighting game, and so on.