I try to do a bit of both. Whenever I put a new Pokémon on my team, I always make sure that it has an attack in its moveset to help protect itself, and also has a couple of moves that provide assistance to some of its fellow teammates. Let's say that I have a Gyarados on my team, whose major weakness would be electric-types. To counter electric, I would teach it Earthquake. With this move, it could take out any electric-type Pokémon within just a blink of an eye. Its other attacks would consist of Waterfall, Stone Edge, and perhaps Bounce. Waterfall should give it the chance to defeat any fire, rock, or ground-types, which my Pokémon would be super-effective to if they're either grass, ice, or steel. Stone Edge would allow it to take down flying-types, which could make any of my fighting Pokémon feel safer. Finally, with Bounce, Gyarados should be able to defeat a variety of fighting Pokémon. Once they're out of the way, none of my normal-types could ever be taken down. Well, they could, actually, but it'd just take a longer time for the opponent to beat them. xD