>>19843126>PoisonOffensively bad, defensively great
>IceOffensively great, defensively the worst
*Least resistances of any type
*Second most types hit SE tied with Rock
>RockOffensively great, defensively terrible
*Most SE weaknesses tied with Grass
*Second most types hit SE tied with Ice
>GrassOffensively terrible, defensively terrible
*Most SE weaknesses tied with Rock
*Most resisted type tied with Bug
>BugOffensively terrible, defensively bad
*Most resisted type tied with Grass
>NormalOffensively bad, defensively pretty poor
*Good neutral coverage doesn't make up for no SE types offensively while still being resisted by Rock/Steel and Ghost immune; same thing goes defensively
Poison used to have terrible offensive when it only hit Grass for SE, but hitting meta relevant Fairies was a boon, and made it even better defensively. Ubers would KILL for a great defensive Poison type for dealing with Toxic Spikes (and didn't cost an Arceus to do so).
Grass doesn't seem so bad because the types it counters (Water, Ground, Rock) are always meta relevant.
As other people have mentioned, the problem with the type is less the type itself (though there are major problems), and more to do with the mons role and stat spread.
Gamefreak loves to make defensive Ice types and defensive Rock types and they're all trash. GF loves to make ~400 BST early bugs; gee, I wonder why the type has so many trash mons.
The few that are good play to their strengths are offensive threats. You have Mamoswine, Tyranitar, Scizor (for those that like to whine about how Steel typing is why its used, imagine a pure Steel Scizor and tell me that the Bug dual typing isn't as important to deliver the offensive momentum carrier we see today), Mega-Venusaur, etc.
Pic related is the average BST of all fully evolved mons for each type, updated up to Gen 5 (doesn't include Fairy types or the few new Gen 6 mons).