From where I stand, they do deserve the criticism they are getting, no matter the company's size. Not because they bit off more they can chew, that's understandable, especially since they were offered by one of the biggest game companies to use one of their biggest properties to make a game similar to one they already had made. But, as stated many times, the lack of communication and promising critical features (PvP, trading, Legendary catching events) which they knew they wouldn't have at launch (and not communicating why it's taking so long to get those critical features) is the nail in the coffin. And instead of working on that, they focus on messing with the Pokemon tracking system, making it harder to track and catch Pokemon, and constantly battling with the Pokemon Mappers.
What does Niantic need to do:
1. SPEAK UP! Communicate! Give us a peak in what's going on in the background! Tell us problems being encountered and delays being caused. Sure some will complain, but you may be surprised how much less heat you'll get (you'll probably get a swarm of suggestions, but most companies ignores those anyway...).
2. Stop messing with the trackers and mappers. Install a tracker that works as players want it to (point me in a direction and tell me how far) and don't worry about people trying to map out where all the Pokemon are because it's not that big of a deal. Yes, they are cheaters who use the maps to "spoof" but they'll do that anyway with or without the maps. If you're going to put any focus in stopping cheaters than it's the spoofing process itself you should focus on and not the maps they're using (since they'd then just rely on Reddit & Twitter to know where to spoof).
3. Figure out PvP, Trading, and those Legendary Events. The first two are core essentials of the franchise and the last one stands out since you released Gen II yet there looks to be no plans to give out the Gen I Legendaries.
Now I'm sure there's also balancing issues with certain Pokemon, but I think other people are better at talking about that than I. That said, I can say something about that: How about letting the players decide what moves their Pokemon has instead of it being random and unchangable? Limiting it to two moves is fine if that's what best works for the battling system you made, but gives the player the option of what kind of moves their Pokemon should know to create their own strategies (and not have wasted their time on a Pokemon who will have moves they find unusable).