A rig should always be as complex as it needs to be, and no more than that. A rig should always be as simple as it can be, but no simpler. Finding that sweet spot, however, is very difficult.
A couple of valuable questions that often help in designing a rig are:
- What does the character being rigged need to be able to do? (How wide will his mouth open? Does he ever smile? Does he ever walk? On his hands?)
- Given those requirements, how can I make the rig as easy and fast for animators to use as possible? (What are things that the character does a lot? What things will he rarely do? How much can things be automated and simplified without sacrificing animator control? How much control does the animator even need?)
In general, keeping the rig as simple as possible both from the user perspective and technical wizardry perspective is good. Doing something clever just because it’s clever is more likely to harm than help. Features should only be added to a rig to solve an actual problem, never because they’re cool or clever… unless your rig is only meant as a tech demo, and not to actually be animated with.