Weakness and resistance. Physical and special defense and offense. These are the bread-and-butter of pokemon battling, the essential elements that you will find yourself relying on and taking into consideration at all times. It doesn’t matter how fantastic a sweeper your pokemon is if it only deals 1/4 damage on its attacks, or if it can’t hit the opponent on a defense that is 100 points weaker than the other defense. Because of this, it is essential that an effective team have some sort of coverage for anything. Even if it’s a single pokemon out of the team of six, you need to have something that can ‘answer’ a situation at least a little better than its teammates.
If you rely exclusively on physical attacks, having no attacks that strike special defense, then pokemon like Kingler, Scizor, Forretress, and Gigalith will likely ruin your team- and thus your day. If special attacks are your only actually damaging moves, then Blissey and Hypno will keep you stopped forever. Having no answer to Steel types leaves you unable to deal with Empoleon, Forretress, Scizor, or Metagross, and a weakness to water will leave you washing out (heh) against virtually any team there is.
As long as you have at least one pokemon who can handle what you’re dealing with, you have a chance. But- isn’t it better to have more than one? How do you do that without leaving yourself too vulnerable to something different? This is what coverage is about. Every team and every trainer is different, each team requires a different strategy and each player thinks differently and switches or attacks in different situations. But no matter how different you are, it’s important to be ready for everything you can reasonably expect.
To that end, you want to maintain coverage on a team level, and when possible on the level of an individual pokemon.
The individual level is a bit harder: you have to make sure that your pokemon can hit as many opponents as possible for at least neutral damage, if not x2 damage. If you’re lucky, this will take only two attack slots- but if you’re unlucky, it can eat up three or even all four of the potential moves a pokemon can have. There are certain combinations that are good for this- the ubiquitous Ice/Electric combination, the physically-empowered Rock/Ground combination, or the far more unusual Fire/Steel/Rock combination. I won’t lay down all the possibilities, but they aren’t too hard to figure out- just pay attention to weaknesses and resistances.
It is far easier to manage this across a team- one method I like to use is that as I am composing a team, I note down every type each pokemon is resistant to. My team is not considered complete unless it has at least one resistance to each attack type- in this way, I can make relatively sure that I am as ready as I can reasonably get for any incoming attack. And with all the move slots distributed amongst my team members for attacks, making sure I have one or even two attacks for laying out each type combination possible is quite simple.