I finally beat my first Gym yesterday, since it was held by only two Pokémon in the CP 800 or so range. I've been playing this game sporadically since release, but live in a semi-urban area where Poké Stops are kilometres apart, there is one Gym within walking distance, and Pokémon spawn rates are pretty low. There are long stretches of road where the "sightings" tab is consistently blank, and near my house I've never seen more than two Pokémon "sighted" at any time.
Frankly, the gameplay design of Pokémon Go outright sucks. Period. It can be fun, but that's despite its design choices rather than because of them. Gyms in particular are a broken mess. You need Pokémon in the ~1000 CP range to take a Gym, and 2000 or so to actually hold it for any length of time. This requirement punishes late adopters, since you need to go through A LOT of grinding to get there, which is particularly difficult if you don't live in a high-activity area. Catching up to actively playing early adopters is nigh impossible, which makes a large part of the game's content practically inaccessible - and this part includes Pokémon battles. The most central mechanic in the whole freaking franchise can't be played until you've grinded (ground?) your way up twenty levels or so. And then some players (looking at you, phalanx) have the gall to complain about "newbies" putting weak Pokémon in Gyms. That's their only option.
It's also pretty bad that you receive Experience as a Trainer, while your Pokémon do not. You have to give them candy to make them stronger, there is no other way. It makes the entire game seem like a particularly convuluted set-up for a Rare Candy glitch, rather than an actual Pokémon game. I'm not playing as a Pokémon Trainer, but as a Pokémon Feeder.
Well, there's the catching mechanic, I suppose, which is actually a bit fun. But they're taking the "Gotta catch 'em all!" aspect a tad too far. "Gotta catch absolutely everything, since that's the only way to progress and training isn't possible". And then you must release 99 % of what you catch. In the rest of the games, you catch Pokémon to bond with them, train them, evolve them and make them stronger. In Go, you catch everything you come across, recycle them for candies, and hoard the candies since powering up your Pokémon doesn't pay off - if you simply wait for a while, you can catch a stronger specimen of the same Pokémon.
IVs are fine, I suppose, they're there in every Pokémon game after all. But what idiot decided to randomize moves? After finally catching a rare Pokémon with good IVs, painstakingly acquiring enough Candy to level it up and evolve it, you can still end up with something borderline useless because it gets the wrong moves - something you only get one shot at. Have fun finding 150 more candies to try again. Getting a good Pokémon only boils down to luck, with several opportunities for the RNG to screw you over. And there's nothing you can do about it.
Still... it's Pokémon. It's fun to go around looking for them, it's fun to throw Poké Balls, and I like the idea of seeking out landmarks to get free items. But the game has multiple, severe downsides, problems in its fundamental design, and is a grind-fest of epic proportions. It has some good ideas, but many very bad ones. I still like playing it, but I can't help seeing all the little things that could have made the game so much better.