One of the more recent things to avoid that's coming up a lot is the use of non-observable requirements. The most common incarnations of this are things like "no hardcoding", "implement this algorithm" or "don't use integer types". I find that these are sufficiently problematic that we should think about disallowing them outright, and close corresponding challenges as "unclear what you're asking".
The main problem with these is that they depend on properties of the program that are highly subjective. Just how much do I need to calculate in order for a result not to be hardcoded? If I need to implement a given algorithm, can I swap two independent operations? How many other deviations are allowed? What does "implement this algorithm" even mean in non-imperative languages? And so on.
So, should we disallow these? If so, what makes a requirement observable (valid) or non-observable (invalid) and what should we do about the exception proposed by feersum in the linked answer (the exception being bans on built-ins that solve the challenge)?