I usually start off with either choosing Mudkip or Treecko (seeing as Blaziken is obviously the worst one) and catch the five first Zigzagoons I meet. Then I train my starter to around level 16 before battling the first gym. I often catch something like a Wurmple or Wingull just to help my starter out a little, but often dump the Pokémon once I get something better. I often train a Breloom in the Petalburg woods too.
Once I get to Dewford town, I usually train myself a Tentacool or Gyarados and either catch an Abra, Machop, Geodude or Aron from the Granite cave and train it.
This is basicaly how I keep my team balanced, I always train them to equal levels and when I find a Pokémon that might have potential to be one of the members in my team, I catch it.
I also EV train Pokémon I find later in the game, depending on how easy it is to EV train them, that is.
lol all bug, maybe one good firetype could kill them all...no offence
An EV trained Heracross or Butterfree could easily kick your ''good fire type's'' butt -_- Besides, there's something called ''wanting to make the game challenging''. Which I didn't expect you to know, seeing as you need ubers to beat the game, I mean come on, the AI sucks, you don't need any uberly powerful Pokémon to beat the league -_-