Simple is king.  Every bit of complexity that is added needs to justify its existance.  How does it make the code better?  Is that benefit worth the added complexity?  We always approach adding more complexity as an evil act to the code.  Only once you determine the code can't really live without it, is it appropriate to add it.

If you can't quantify and justify the complexity then leave it out.