It feels like I either have too many players so that some complain because they don't get playing time, or else I don't have enough and end up stuck because of injuries.
Depends on your tactics and how flexible you want them to be. For example, if you play with one forward then 3 first team players in that position will do just fine but if you alternate with a tactic with more forwards then you will need one or two more; and like that with the rest of the positions.
The key is to rotate them between cup, league and other competitions matches so they don't suffer fatigue and get injured easier (also, adjust your training intensity). In matches against weak teams (usually in cup) try to give playing time to someone in your youth team to give them experience and keep tabs in free agents so in case you get a lot of your players injured you can easily sign one.
I normally have a 35 man squad. 2 rotating keepers with a 3rd who is a youth for cup games only. I have 10 CBs - I play 3 CBs in every game, I don't use full backs...6 of good quality with 4 youths again for cup games. 3 CMs - 2 good quality with 1 youth. 6 Wingers, 4 good quality with 2 youth. 3 AMs with 1 youth amongst them. 10 Strikers, 6 good quality & rotated every other match with 4 youths for cup games again. This seems to work for me. If someone complains, I play him in 4 out of 5 games in a row then he shuts up for a while. My formation is weird I'll admit but it works for me: 3 - 1 - 3 - 3. Good luck :)