Dungeons and Dragons 3.5 was absolute nonsense balance-wise, but it was remarkable because it was imbalanced in a whole variety of different ways that are good object lessons. So, rather than one huge master-post explaining it, here’s one example:
A thing you’ll find in most games is there’s an opportunity cost to adding things to your character. Magic items occupy this space in D&D where there are slots, clearly recognising that there’s a good reason to limit the number of belts you wear, especially when those belts do magical things. Thing is, the item system isn’t the only place that came up.
In most games there’s an opportunity cost. Every choice you make is an option. In 3.5 D&D there were a surprising number of times when there were no such choices. If you were aiming for a prestige class at level 6 onwards, your first five levels could sometimes look like utter nonsense – fighter 2, barbarian 2, ranger 1, for example, would give you a grotesque fort save, a handful of benefits and lose you a single point of reflex and will, which was just not a reasonable trade. If you were building a wizard, prestige classes themselves could look ridiculous, as you cherry-picked the opening benefits of four or five of them because none of them had a meaningful late game reward.
When you give players an option for something, you need to make it so that they’re giving something up if they take it. Not that every option is punishing – that’s its own bad idea – but that every option is a choice, and choices should be meaningful.