I generally working with well rounded teams of tanky Pokemon and offensive sweepers with custom EV spreads and like to work out what builds will work most effectively vs common threats. My favourite teams usually end up being primarily made up sponges / tanks that can take a hit from anything offensive (So they specialise in either HP or one of the defensive stats and then an attacking stat, sacrificing speed - and I like having status inflictors like Wil-O-Wisp and/or a recovery move) but I like running offensive stuff alongside them to balance it out. I'm always quite happy to fodder off one of the slow tanks when they've done their job and are on low HP so I get the free switch for a revenge killing sweeper. So I tend to like Pokemon like Slowbro, Multiscale Dragonite, Goodra, and Ferrothorn for some examples off the top of my head. And I'll pair them with fast things like Greninja, Talonflame and Alakazam or something that can use set up when my opponent makes a bad switch anything that can learn Dragon Dance. I don't really care for outright walls relying on toxic stall. I find that very boring to work with, but I quite like playing against it because it's so dumb to try to beat.
I like playing singles, so stuff that cripples a threat and/or makes my opponent want to waste their turn with a switch pre-emptively is a point in my favour. I've always believed that a lot of singles is based around prediction and knowing when to and when to not switch Pokemon out rather than going full damage with a team of fast sweepers / revengers.
I'd recommend mostly using balanced teams with some offensive, some defense and status inflicting skills or just anything frighten an opponent into switching badly in singles. You can run a team full of hyper offense - it does work, but you'll likely encounter some problems if your opponent knows how to cripple you well enough or stop you OHKOing them.