We have a very simple form overlay for adding items (let's say cars) to a list. There can only be one error, which is to enter a duplicate car name.
We've had a rather split opinion on the team as to displaying a validation message immediately or not, so in one case we simply display a (!) icon next to the field, and in the other we specify that the name is a duplicate, as soon as a duplicate is detected.
In the case that we don't display a message, a message is displayed if the user tries to submit, so they will learn what the (!) means.
So to be clear, there is only one thing that can go wrong on the form. Should we say what has gone wrong every time, or should we trust that the users will learn?